众多 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
中指定。