A physicist, an engineer, and a computer scientist were discussing the nature of God. Surely a Physicist, said the physicist, because early in the Creation, God made Light; and you know, Maxwell’s equations, the dual nature of electro-magnetic waves, the relativist consequences… An Engineer!, said the engineer, because before making Light, God split the Chaos into Land and Water; it takes a hell of an engineer to handle that big amount of mud, and orderly separation of solids from liquids…
The computer scientist shouted: And the Chaos, where do you think it was coming from, hmm?
---Anonymous
Autoconf 是一个用于生成可以自动地配置软件源代码包以适应多种 Unix 类系统的 shell 脚本的工具。由 Autoconf 生成的配置脚本在运行的时候与 Autoconf 是无关的, 就是说配置脚本的用户并不需要拥有 Autoconf 。
由 Autoconf 生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要通过给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。(在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。)因此,它们在混合系统或者从各种常见 Unix 变种定制而成的系统中工作的很好。没有必要维护文件以储存由各个Unix变种、各个发行版本所支持的特征的列表。
对于每个使用了 Autoconf 的软件包,Autoconf 从一个列举了该软件包需要的,或者可以使用的系统特征的列表的模板文件中生成配置脚本。在 shell 代码识别并响应了一个被列出的系统特征之后,Autoconf 允许多个可能使用(或者需要)该特征的软件包共享该特征。如果后来因为某些原因需要调整 shell 代码,就只要在一个地方进行修改;所有的配置脚本都将被自动地重新生成以使用更新了的代码。
Metaconfig 包在目的上与 Autoconf 很相似,但它生成的脚本需要用户的手工干预,在配置一个大的源代码树的时候这是十分不方便的。不像 Metaconfig 脚本,如果在编写脚本时小心谨慎,Autoconf 可以支持交叉编译(cross-compiling)。
Autoconf 目前还不能完成几项使软件包可移植的工作。其中包括为所有标准的目标自动创建 Makefile 文件,包括在缺少标准库函数和头文件的系统上提供替代品。目前正在为在将来添加这些特征而工作。
对于在 C 程序中的 #ifdef 中使用的宏的名字,Autoconf 施加了一些限制(参见预处理器符号索引)。
Autoconf 需要 GNU m4 以便于生成脚本。它使用了某些 UNIX 版本的 m4 所不支持的特征。它还会超出包括 GNU m4 1.0 在内的某些 m4 版本的内部限制。你必须使用 GNU m4 的 1.1 版或者更新的版本。使用 1.3 版或者更新的版本将比 1.1 或 1.2 版快许多。
关于从版本 1 中升级的详情,参见从版本 1 中升级。 关于 Autoconf 的开发历史,参见 Autoconf 的历史。 对与Autoconf 有关的常见问题的回答,参见关于 Autoconf 的问题。
把关于 Autoconf 的建议和 bug 报告发送到 bug-gnu-utils@prep.ai.mit.edu 。 请把你通过运行 autoconf --version 而获得的 Autoconf 的版本号包括在内。