为了为软件包创建 configure 脚本,需要编写一个名为 configure.in 的文件,该文件包含了对那些你的软件包需要或者可以使用的系统特征进行测试的 Autoconf 宏的调用。 现有的 Autoconf 宏可以检测许多特征; 对于它们的描述可以参见现有的测试。 对于大部分其他特征,你可以使用 Autconf 模板宏以创建定制的测试;关于它们的详情,参见编写测试。对于特别古怪或者特殊的特征,configure.in 可能需要包含一些手工编写的 shell 命令。程序autoscan 可以为你编写 configure.in 开个好头(详情请参见用 autoscan 创建 configure.in )。
SofTool.CN Note:
据说 configure.in 目前已经升级为 configure.ac 。
除了少数特殊情况之外,在 configure.in 中调用 Autoconf 宏的顺序并不重要。 在每个 configure.in 中,必须在进行任何测试之间包含一个对 AC_INIT 的调用, 并且在结尾处包含一个对 AC_OUTPUT 的调用(参见创建输出文件)。 此外,有些宏要求其他的宏在它们之前被调用,这是因为它们通过检查某些变量在前面设定的值以决定做些什么。这些宏在独立的说明中给出(参见现有的测试),而且如果没有按照顺序调用宏,在生成 configure 时会向你发出警告。
为了提高一致性,下面是调用 Autoconf 宏的推荐顺序。通常,在本列表中靠后的项目依赖于表中靠前的项目。例如,库函数可能受到 typedefs 和库的影响。
AC_INIT(file)
checks for programs
checks for libraries
checks for header files
checks for typedefs
checks for structures
checks for compiler characteristics
checks for library functions
checks for system services
AC_OUTPUT([file...])
最好让每个宏调用在 configure.in 中占据单独的一行。大部分宏并不添加额外的新行;它们依赖于在宏调用之后的新行以结束命令。这种方法使得生成的 configure 脚本在不必添加大量的空行的情况下比较容易阅读。在宏调用的同一行中设置 shell 变量通常是安全的,这是因为 shell 允许出现没有用新行间隔的赋值。
在调用带参数的宏的时候,在宏名和左括号之间不能出现任何空格。如果参数被 m4 引用字符 [ 和 ] 所包含,参数就可以多于一行。如果你有一个长行,比如说一个文件名列表,你通常可以在行的结尾使用反斜线,以便在逻辑上把它与下一行进行连接(这是由 shell 实现的,Autoconf 对此没有进行任何特殊的处理)。
有些宏处理两种情况:如果满足了某个给定的条件就做什么,如果没有满足某个给定的条件就做什么。在有些地方,你可能希望在条件为真的情况下作些事,在为假时什么也不作。反之亦然。为了忽略为真的情况,把空值作为参数 action-if-found 传递给宏。为了忽略为假的情况,可以忽略包括前面的逗号在内的宏的参数 action-if-not-found 。
你可以在文件 configure.in 中添加注释。注释以 m4 预定义宏 dnl 开头,该宏丢弃在下一个新行之前的所有文本。这些注释并不在生成的 configure 脚本中出现。例如,把下面给出的行作为文件 configure.in 的开头是有好处的:
dnl Process this file with autoconf to produce a configure script.