2 An Introduction to the Autotools

本文详细介绍了GNU Build System的使用场景,包括基本安装、标准Makefile目标、目录变量、配置变量、配置设置覆盖、平行构建树、两步安装、交叉编译、程序安装时重命名、二进制包构建和准备发布等。通过一个名为amhello的示例,演示了如何创建、配置和构建源码包。此外,还讨论了依赖关系跟踪和嵌套包的概念,展示了Autotools如何简化多源码包的管理和构建过程。
摘要由CSDN通过智能技术生成

2.2 Use Cases for the GNU Build System

2.2.1 Basic Installation

automake 源码包提供了一个amhello-1.0.tar.gz示例tar包,在automake-1.16.1/doc/路径中有解压缩的amhello源码包。
进入amhello目录中,依次执行 ./configuremakemake checksudo make installmake installcheck命令完成安装。

  1. configure命令探测系统的各种特性,最终生成一系列Makefile文件。amhello示例只生成了两个Makefile
  2. make命令编译生成安装该软件需要的所有可执行文件、库文件和脚本文件。amhello示例只生成了hello可执行文件。
  3. make check命令运行软件的测试样例,该步不是必须的。但在安装程序前运行该步可保证编译过程产生的软件是想要的。amhhello示例没有测试样例,所以运行make check什么都不做。
  4. make install命令安装编译的软件到系统中。这会拷贝编译生成的可执行文件、库文件、脚本及其他一些来自源码包的数据文件到各类型文件指定的目录中。默认情况下,所有文件都安装到 /usr/local目录中,其中二进制可执行文件安装到 /usr/local/bin/ 目录,库文件安装到 /usr/local/lib文件等。这些目标目录一般用户没有可写权限,所以运行make install前需通过su命令切换root用户,或直接通过sudo make install获取root权限安装。在amhello示例中,hello可执行文件被安装到 /usr/local/bin目录,README文件被安装到 /usr/local/share/doc/amhello目录。
  5. make installcheck命令在已安装的程序文件上运行测试样例。make check在源码包中测试要安装的程序文件,make installcheck在程序安装目录中测试已经安装的程序文件。有些软件安装时可能无法在源码包中运行make check,此时可运行make installcheck检查程序。有些软件make checkmake installcheck执行相同的测试,只不过一个测试未安装程序文件,一个测试已安装程序文件。当源码包中未安装程序文件路径分布与已安装程序文件路径分布不同时,可分别执行两个check命令测试程序文件。make installcheck还可以用于检测安装不完全问题。amhello示例执行make installcheck什么都不做。

2.2.2 Standard Makefile Targets

在GNU Build System中,checkinstallinstallcheck都是传给make命令的参数,称为targetsmake命令是make all的缩写,all是GNU Build System中的默认target
GNU Coding Standards中常用的targets如下:

  1. make all
  2. make install
  3. make install-strip
    make install相同,只是剥离了debugging symbols
  4. make uninstall
    make install的反操作,删除安装的程序文件。(需要与执行安装操作有相同build tree,可以是同一源码包重新构建的build tree,源码包的不同版本未测试
  5. make clean
    删除build tree中所有make all命令生成的文件
  6. make distclean
    make clean的基础上,再删除由 ./configure命令生成的文件
  7. make check
  8. make installcheck
  9. make dist
    从源码包中重新生成package-version.tar.gz发布包

2.2.3 Standard Directory Variables

GNU Coding Standards指定一组层次变量来指定安装目录,部分如下:

| Directory variable | Default value     				|
| prefix             | /usr/local       				|
|  exec_prefix       | ${prefix}    	 				|
|   bindir           | ${exec_prefix}/bin				|
|   libdir           | ${exec_prefix}/lib				|
...
|  includedir        | ${prefix}/include				|
|  datarootdir		 | ${prefix}/share					|
|   datadir          | ${datarootdir}					|
|   mandir			 | ${datarootdir}/man				|
|   infodir			 | ${datarootdir}/info				|
|   docdir			 | ${datarootdir}/doc/${PACKAGE}	|
...

用户可以在执行 ./configure时根据需要修改某些目录变量,如:

lgd@ubuntu:~/Workspace/amhello$ ./configure --prefix ~/usr

lgd@ubuntu:~/Workspace/amhello$ ./configure --prefix=$HOME/usr

第二种形式不可以使用 –prefix=~/usr,会报如下错误:

configure: error: expected an absolute directory name for --prefix: ~/usr

对于amhello示例,修改后程序文件安装为 ~/usr/bin/hello~/usr/share/doc/amhello/README
其他目录选项可以通过 ./configure --help查看

2.2.4 Standard Configuration Variables

GNU Coding Standards定义了一组标准配置变量用于编译过程,部分变量为:

CC 				C compiler command
CFLAGS 			C compiler flags
CXX 			C++ compiler command
CXXFLAGS 		C++ compiler flags
LDFLAGS 		linker flags
CPPFLAGS 		C/C++ preprocessor flags
. . .

configure脚本执行时一般会为这些变量配置合适的值。用户可能需要覆盖某些变量的值,例如有多个版本的编译器时需要使用非默认的那个、需要引用默认路径外的头文件、需要引用默认链接路径外的库等,此时可以通过传递给configure脚本相应选项参数来覆盖某些变量的配置,如:

lgd@ubuntu:~/Workspace/amhello$./configure --prefix ~/usr CC=gcc-3 \
CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib

可通过 ./configure --help查看所有的变量配置选项。

2.2.5 Overriding Default Configuration Setting with config.site

当要使用相同的configure脚本配置选项来安装多个软件时,可以通过创建一个文件来保存安装这些软件共同需要的配置选项。如果prefix/share/config.site文件存在(路径的 prefix 前缀在执行 ./configure脚本时可能会指定,此时要到指定的路径下寻找config.site文件),configure脚本执行时会先引用该文件中的配置,对于configure命令:

lgd@ubuntu:~/Workspace/amhello$./configure --prefix ~/usr CC=gcc-3 \
CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib

可以创建 ~/usr/share/config.site文件:

test -z "$CC" && CC=gcc-3
test -z "$CPPFLAGS" && CPPFLAGS=-I$HOME/usr/include
test -z "$LDFLAGS" && LDFLAGS=-L$HOME/usr/lib

此时,任何时候通过 –prefix ~/usr选项调用configure脚本,configure脚本都会寻找 ~/usr/share/config.site文件并定义相应的配置选项:

lgd@ubuntu:~/Workspace/amhello$./configure --prefix ~/usr
configure: loading site script /home/lgd/usr/share/config.site
...

2.2.6

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值