Autoconf是一个用于创建能够适应多种Unix类系统的shell脚本的工具。由Autoconf生成的配置脚本在运行时与Autoconf是无关的,这意味着配置脚本的用户不需要拥有Autoconf。Autoconf是GNU构建系统的一部分,它与Automake、Libtool等软件一起工作,由戴维·麦肯思于1991年夏天编写,用于支持他在自由软件基金会的编程工作。
软件说明
对于每个使用了Autoconf的软件包,Autoconf从一个列举了该软件包需要的,或者可以使用的系统特征的列表的模板文件中生成配置脚本。在shell代码识别并响应了一个被列出的系统特征之后,Autoconf允许多个可能使用(或者需要)该特征的软件包共享该特征。如果后来因为某些原因需要调整壳层代码,就只要在一个地方进行修改;所有的配置脚本都将被自动地重新生成以使用更新了的代码。
主要功能
软件开发者通过使用GNU m4语言在`configure.ac`文件中写出限定配置脚本行为的列表。Autoconf将`configure.ac`中的命令转化为对应特定平台的配置脚本。Autoconf本身并不具备编译能力,它仅仅用于产生通常附带在软件包中的配置脚本。
由Autoconf生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要通过给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。因此,它们在混合系统或者从各种常见unix变种定制而成的系统中工作得很好。没有必要维护文件以储存由各个Unix变种、各个发行版本所支持的特征的列表。
configure.ac格式
GNU Autoconf手册建议`configure.ac`文件使用以下格式:
- Autoconf requirements
- `AC_PREREQ(version)`宏用于确保有足够新版本的autoconf程序来处理`configure.ac`文件
- `AC_INIT(package, version, bug-report-address)`宏在每个`configure.ac`文件中都是必需的。它指定了要生成配置脚本的软件包的名称和版本,以及开发者的电子邮件地址。
- 包信息
- 程序检查
- 库检查
- 头文件检查
- 类型检查
- 结构检查
- 编译器特性检查
- 库函数检查
- 系统服务检查
- `AC_CONFIG_FILES([file...])`
- `AC_OUTPUT`
工作原理
Autoconf通过检查特性而不是软件版本来确保可移植性。例如,它可以发现支持ISO C的编译器,即使在原生编译器不支持ISO C的系统上。因此,配置脚本可以在未知的或者较新的系统中得到合理的结果,同时允许管理员根据他们的系统来配置脚本。
参考资料