GNU Autoconf用于产生configure脚本,该脚本在编译应用程序之前运行。configure脚本可以运行一系列开发者要求的测试以确定该软件是否可以在一个特定环境中编译。例如,它可以确定你的机器上安装的(GNU或非GNU)C编译器的版本,并确保某些标准C头文件已准备好。它也可能会做一些更复杂的事情——GNU autoconf有着很大的灵活性。
GNU configure可以用于建立包含一个特定系统动态信息的头文件,这些动态信息可用于源代码测试。例如,一个编译周期通常会创建一个头文件config.h,它包含许多#define声明对应已经经过测试的特征。如果GNU configure确定本地软件环境适合编译软件,那么这些定义将有助于增加软件的灵活性,因为它们允许在必要的时候进行条件代码编译。
你很快会意识到需要使用GNU configure,因为它将极大地简化了你在Linux上的开发工作。
下面是一个configure.in的示例文件,configure脚本就是通过它生成的:
你可以看到这个文件较短,而且只包含几个命令(实际上都是一些宏,许多工具都是通过M4 宏处理器建立的,但并不影响这里的讨论)。
configure.in文件以命令AC_PREREQ开头,它要求Autoconf的***版本是2.59。因此,用于生成configure脚本的系统必须安装了GNU Autoconf 2.59。其后的AC_INIT用于告诉Autoconf软件包的名称、版本和作者的电子邮件地址。随后是一连串以AC开头的命令,它们直接确定哪些特征和测试需要包含在configure脚本中。
你很快会了解到configure.in文件中其他行的含义。
这个示例文件中的主要Autoconf命令是:
AC_CANONICAL_SYSTEM:由Autoconf来确定是为主机编译还是为另一个目标系统编译,并在必要时处理交叉编译 。
AC_CONFIG_SRCDIR:测试是否存在文件src/hello.c,如果没有发现它,将大声抱怨。这用于确保用户是在正确的目录位置下运行正确的脚本,等等。
AC_PROG_CC:测试是否存在C编译器(例如,如果系统中安装了GCC,它将检测到它)。
AC_HEADER_STDC:测试标准C头文件的可用性(在/usr/include目录中)。
AC_C_BIGENDIAN:确定机器的字节序(详见3.3节)——如果需要,这是你可以添加的众多定制测试中的一个。
AC_CHECK_HEADERS:指定要测试的额外的系统头文件。
AC_OUTPUT:指定GNU Autoconf运行之后将输出的文件列表。在本例中,GNU Autoconf将导致在顶层目录和子目录src中生成Makefile文件。
configure脚本从configure.in文件中自动生成并基于可移植的shell代码。这一点非常重要,因为要想知道任一给定的Linux或UNIX系统安装的是哪种shell是非常困难(或不可能)的。虽然几乎所有的Linux系统都会安装bash,但既然存在这种可能性,我们还是值得提供这样的灵活性。除非你决定编写自己的configure测试,否则你不需要担心要编写自己的可移植shell代码(如果真的需要,请查看Autoconf文档)。
【编辑推荐】