众多 GNU autotools 提供了一种在多重操作系统和机器架构之上联编软件的抽象机制。 在 Ports Collection 中, port 可以通过简单的方法来使用这些工具:
USE_AUTOTOOLS= 工具:版本[:操作] ...
撰写本书时, 工具 可以设置为 libtool、 libltdl、 autoconf、 autoheader、 automake 或 aclocal 之一。
版本 用来指定希望使用的工具的特定版本 (参见 devel/{automake,autoconf,libtool}[0-9]+ 以了解有效的版本号)。
操作 是一个可选的扩展选项, 用于修改如何使用工具。
可以同时指定多个不同的工具, 可以在一行中指定, 也可以用 Makefile 的 += 结构。
最后, 可以使用一个特殊的名为 autotools 的工具, 它会安装全部可用的 autotools 版本, 以适应跨平台开发的需要。 您可以通过安装 devel/autotools port 来达到这一目的。
使用 GNU 联编框架的共享库通常会使用 libtool 来调整共享库的编译和安装, 以便与所运行的操作系统相匹配。 通常的做法是使用应用程序所附带的 libtool 副本。 如果需要使用外部的 libtool, 则可以使用 Ports 套件提供的版本:
USE_AUTOTOOLS= libtool:版本[:env]
如果不使用额外的操作符, libtool:版本 表示希望联编框架使用 configure 脚本来对系统所安装的 libtool 进行修补。 这会暗含地定义 GNU_CONFIGURE。 更进一步, 联编框架还会设置一系列 make 和 shell 变量用于 port 后续的操作。 请参见 bsd.autotools.mk 了解进一步的详情。
如果指定了 :env 操作符, 则表示只设置环境, 而跳过其他的操作。
最后, LIBTOOLFLAGS 和 LIBTOOLFILES 可以用来替换最常修改的参数, 以及将被 libtool 修补的文件。 多数 port 不需要这样做。 请参见 bsd.autotools.mk 以了解进一步的细节。
一些 ports 会使用 libltdl 库, 后者是 libtool 软件包的一部分。 使用这个库并不意味着必须使用 libtool 本身, 因此提供了另一组结构。
USE_AUTOTOOLS= libltdl:版本
目前, 这一设置所做的全部工作是将 LIB_DEPENDS 设置为适当的 libltdl port, 并作为一项方便的功能, 协助开发人员消除在 USE_AUTOTOOLS 框架以外的, 对于 autotools port 的依赖。 这个工具并不提供其它的操作符。
某些 port 并没有直接提供 configure 脚本, 但包含了作为 autoconf 模板的 configure.ac 文件。 可以用下列设置来要求 autoconf 创建 configure 脚本, 并使用 autoheader 来为 configure 脚本创建模板头文件。
USE_AUTOTOOLS= autoconf:版本[:env]
以及
USE_AUTOTOOLS= autoheader:版本
上述设置会暗含使用 autoconf:版本。
对于 libtool, 设置与前面类似。 如果指定可选的 :env 操作符, 则表示只设置用于后续工作的环境。 如果不指定, 则会对 port 进行相应的修补和重新配置。
其它的可选变量, 如 AUTOCONF_ARGS 和 AUTOHEADER_ARGS 可以通过 port 的 Makefile 来显式地指定替换。 类似 libtool, 多数 port 并不需要这样做。
某些软件包只提供了 Makefile.am 文件。 这些文件必须首先用 automake 转换为 Makefile.in 并使用 configure 来生成实际的 Makefile。
类似地, 偶尔会有一些软件包不提供联编所需的 aclocal.m4 文件。 这些文件可以通过使用 aclocal 来扫描 configure.ac 或 configure.in 自动生成。
aclocal 与 automake 有和 autoheader 与 autoconf 在前面一节中所介绍的相类似的关系。 aclocal 会暗含使用 automake, 因此:
USE_AUTOTOOLS= automake:版本[:env]
和
USE_AUTOTOOLS= aclocal:版本
也自动暗含使用 automake:版本。
与 libtool 类似, autoconf 如果使用了可选的 :env 操作符表示仅仅设置用于后续使用的环境, 如果不设置, 则会对 port 进行重新配置。
对于 autoconf 和 autoheader 而言, automake 和 aclocal 提供了对应的可选参数变量 AUTOMAKE_ARGS 和 ACLOCAL_ARGS, 如果需要的话, 可以在 port 的 Makefile 中指定。