首页 > 其他分享 >Make之configure详解

Make之configure详解

时间:2022-11-23 11:26:38浏览次数:64  
标签:选项 configure -- Make cache 编译 详解 DIR

Make之configure详解

Linux环境下,如果通过源代码编译安装程序的简单过程可以描述为:./configure-->make-->make install。其中./configure配置脚本功能就是对你的系统做很多的测试,以用来检测出你的安装平台的目标特征,比如它会检测你是不是有CC或GCC,它是个shell脚本,是autoconf的工具的基本应用,它会产生一个输出文件"./Makefiles",接下来make程序通过该文件来实现编译。源码中的README和INSTALL是一定要看的。

  configure脚本有大量的命令行选项,对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的。configure脚本位于待安装程序源码根目录下面,会有一个configure可执行文件,使用'./configure --help'命令就可以看到可用的所有选项,尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的存在是很有益处的。下面对每一个选项进行简略的介绍。   configure脚本选项的配置内容基本上分成9块内容,分别是: 1. 配置区【Configuration】   2. 程序安装目录区【Installation directories】   3. 程序名称区【Program names】   4. 系统类型区【System types】   5. 可选特性区【Optional Features】   6. 可选安装包区【Optional Packages】   7. 影响安装的环境变量区【Some influential environment variables】   8. 其他信息   1. configuration 这块内容主要是对./configure脚本本身运行的过程进行配置,如是否显示运行结果给用户,是否创建cache文件啊。由于这些选项都比较简单,就不翻译了。     -h, --help              display this help and exit         --help=short        display options specific to this package         --help=recursive    display the short help of all the included packages     -V, --version           display version information and exit     -q, --quiet, --silent   do not print `checking...' messages         --cache-file=FILE   cache test results in FILE [disabled]     -C, --config-cache      alias for `--cache-file=config.cache'     -n, --no-create         do not create output files         --srcdir=DIR        find the sources in DIR [configure dir or `..']     其中重点解释下:   --cache-file=FILE   'configure'会在你的系统上测试存在的特性(或者bug!),为了加速随后进行的配置,测试的结果会存储在一个cache file里,尤其当configure一个复杂的源码树时,一个很好的cache file的存在会对性能有很大帮助。   --no-create   'configure'中的一个主要函数会制作输出文件(./Makefile),此选项阻止'configure'生成这个文件,你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了。     2. Installation directories   这个区块是./configure脚本中经常被配置的选项区,这里的主要作用就是配置你要安装的软件的安装后的目录,默认情况下(用户没有主动配置),./configure会将软件安装在/usr/local/bin/和/usr/local/lib/等目录下面。   先介绍两个重要的选项:([]这个里面的内容是该选项的默认值的意思)       --prefix=PREFIX         install architecture-independent files in PREFIX [/usr/local]       --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX  [PREFIX]     即如果你想指定2你安装的程序的具体目录,就用这2个选项,他们之间的区别就只有是否平台相关性。通过指定这2个选项后,你的程序就完全的被安装在你指定的目录下面了,此时以后删除该程序,只需要简单的移除该目录下所有内容就可以了。     当然,如果你想进一步指定软件安装后的具体目录(如可执行文件的目录,共享库的目录等),你可以使用如下选项来配置:       --bindir=DIR            user executables [EPREFIX/bin]       --sbindir=DIR           system admin executables [EPREFIX/sbin]       --libexecdir=DIR        program executables [EPREFIX/libexec]       --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]       --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]       --localstatedir=DIR     modifiable single-machine data [PREFIX/var]       --libdir=DIR            object code libraries [EPREFIX/lib]       --includedir=DIR        C header files [PREFIX/include]       --oldincludedir=DIR     C header files for non-gcc [/usr/include]       --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]       --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]       --infodir=DIR           info documentation [DATAROOTDIR/info]       --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]       --mandir=DIR            man documentation [DATAROOTDIR/man]       --docdir=DIR            documentation root [DATAROOTDIR/doc/mysql]       --htmldir=DIR           html documentation [DOCDIR]       --dvidir=DIR            dvi documentation [DOCDIR]       --pdfdir=DIR            pdf documentation [DOCDIR]       --psdir=DIR             ps documentation [DOCDIR]     3. Program names     如果你想改变安装后程序的名称,如你安装qq程序,但是你不想称呼它为“qq“,而想叫它为“360”,那么可以通过下面这些选项来配置了。       --program-prefix=PREFIX            prepend PREFIX to installed program names       --program-suffix=SUFFIX            append SUFFIX to installed program names       --program-transform-name=PROGRAM   run sed PROGRAM on installed program names     4. System types     一个程序开发完成以后,对源代码进行编译,将编译后的文件发布出去形成所谓的各个平台的安装版本(非开源的都是这么干的,开源的也可以这样编译后不同运行平台的编译版本),这就是所谓的交叉编译。下面介绍有关这平台相关性的选项。       --build=BUILD     configure for building on BUILD [guessed]       --host=HOST       cross-compile to build programs to run on HOST [BUILD]       --target=TARGET   configure for building compilers for TARGET [HOST]     通过--build选项来指定执行代码编译工作的主机,通常该值默认是cofig.guess(该shell脚本和./configure在同一目录)来猜即可(一般就是你执行编译操作的主机),当然你也可以通过这个选项指定具体的值。     编译的程序在什么机器上运行是由--host选项指定的,其默认值都是--build,当两者不一样的时候就是所谓的交叉编译。     --target选项用来配置编译工具,它只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用--build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。     5. Optional Features     当你想在./configure时使用某个特性的时候,可以来配置该区块中的选项值,它主要分为disable和enable两大类,具体有哪些特性可以用过“./configure --help“来查询。下面主要来总的介绍下这2类配置。     --disable-FEATURE     当你想禁用某个FEATURE的时候可以使用它(尤其是某些软件可能默认开启某些特性,而实际上你是不需要的),例如:$ ./configure --disable-gui     -enable-FEATURE[=ARGUMENT]     相反的,一些软件包可能提供了一些默认被禁止的特性,这时你可以使用“--enable-FEATURE“来起用它,一个特性可能会接受一个可选的参数值。例如:$ ./configure --enable-buffers=128     `--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的     6. Optional Packages     软件的包安装的时候,可能会存在依赖。加上a软件依赖于b软件,那么在安装a软件的时候,必须要先安装b软件,而此时b软件偏偏不在系统的默认查询目录(即系统无法查询到,或者你不想使用系统默认的b软件而想使用你自己安装的b软件(整个系统有2个b软件)),你就可用通过with选项来指定具体的软件包地址,通过without选项来指定不使用指定的软件包。     --with-PACKAGE[=ARGUMENT]     --without-PACKAGE     '--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的.     例如:     $ ./configure --with-tcl=/usr/local --with-tk=/usr/local     $ ./configure --without-gnu-ld     关于这些这个选项区块,有些软件会有类似下面2个比较特殊的选项。     --x-includes=DIR     这个选项是'--with-PACKAGE'选项的一个特例,它提供了向'configure'脚本指明包含X11头文件的目录的方法。     --x-libraries=DIR     类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法。           关于第5/6两块,和具体程序的相关性就比较高了,很多程序的不同配置都可以在这里面指定。     7. Some influential environment variables     这块主要是影响编译器的编译环境变量。     最后一个问题,一个软件包通过编译源代码安装后,如何完全的卸载呢?     如果原先的source还在的话,很多source的Makefile都有写uninstall规则,直接在Souce里make uninstall(make install & make clean)就可行,不过如果碰到无良作者没写的,那一句一句看Makefile里install部分他都干了些什么,然后挨个删除。如果source没了,那就悲剧了。      

标签:选项,configure,--,Make,cache,编译,详解,DIR
From: https://www.cnblogs.com/zxdplay/p/16917651.html

相关文章

  • 【转载】ElasticSearch集群搭建及集群原理详解
    首先进行单机安装,见以下:Elasticsearch+Kibana+IK分词器安装-檀潇兵-博客园(cnblogs.com)1集群搭建1.1修改配置每台机器修改elasticsearch.yml......
  • Day20:继承详解
    继承的理解继承:对类进行抽象化;也就是将存在的类构造成新的类;比如说学生是一个类,老师是一个类,那么我们可以将学生类和老师类收纳进人这个类;那么学生和老师则为子类(派生类)......
  • 详解蓝牙模块的分类
        摘要:蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,蓝牙模块将芯片和外围硬件电路集成到一个PCB上,开发出所需的内置程序实现蓝牙功能的设备。可以通过......
  • C++语言类的详解和示例
     超女选秀的例子我们玩了很久,为了教学的需要,暂时离开美眉们,我将采用实际项目开发的例子。在C语言基础知识中已学习过文件操作,在实际开发中,我会把文件操作封装成一个类,类的......
  • C++语言函数重载详解和示例
     C++函数重载的概念在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如把变量的值写入文件,变量的类型int、long、double、char,需要通过参数把变量......
  • C语言makefile文件
    文章目录​​一、makefile的编写​​​​二、make命令​​​​三、makefile文件中的变量​​​​四、应用经验​​​​五、课后作业​​​​六、获取视频教程​​​​七、版......
  • Pod控制器详解(HPA)
    HorizontalPodAutoscaler(HPA)前面可以实现通过手工执行`kubectlscale`命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标--自动化、智能化。Kubernetes期......
  • 从零开始介绍cmake
    从零开始介绍cmake-bilibili说明cmake的定义是什么?-----高级编译配置工具当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等......
  • Make 与 CMake
    Make与CMakeCMake入门实战Make......
  • 关于Spring注解的基础详解(补充上次并不清楚的内容)
    注解,需要在.xml文件里面加这么一句话:<context:component-scanbase-package=""/>(组件)Component注解主要用于接口的实现类里面,代替掉.xml文件里面的这句话:(主要作用:代替......