6.4 利用 GNU autotools

6.4.1 入门

  众多 GNU autotools 提供了一种在多重操作系统和机器架构之上联编软件的抽象机制。 在 Ports Collection 中, port 可以通过简单的方法来使用这些工具:

USE_AUTOTOOLS= 工具:版本[:操作] ...

  撰写本书时, 工具 可以设置为 libtoollibltdlautoconfautoheaderautomakeaclocal 之一。

  版本 用来指定希望使用的工具的特定版本 (参见 devel/{automake,autoconf,libtool}[0-9]+ 以了解有效的版本号)。

  操作 是一个可选的扩展选项, 用于修改如何使用工具。

  可以同时指定多个不同的工具, 可以在一行中指定, 也可以用 Makefile 的 += 结构。

  最后, 可以使用一个特殊的名为 autotools 的工具, 它会安装全部可用的 autotools 版本, 以适应跨平台开发的需要。 您可以通过安装 devel/autotools port 来达到这一目的。

6.4.2 libtool

  使用 GNU 联编框架的共享库通常会使用 libtool 来调整共享库的编译和安装, 以便与所运行的操作系统相匹配。 通常的做法是使用应用程序所附带的 libtool 副本。 如果需要使用外部的 libtool, 则可以使用 Ports 套件提供的版本:

USE_AUTOTOOLS= libtool:版本[:env]

  如果不使用额外的操作符, libtool:版本 表示希望联编框架使用 configure 脚本来对系统所安装的 libtool 进行修补。 这会暗含地定义 GNU_CONFIGURE。 更进一步, 联编框架还会设置一系列 make 和 shell 变量用于 port 后续的操作。 请参见 bsd.autotools.mk 了解进一步的详情。

  如果指定了 :env 操作符, 则表示只设置环境, 而跳过其他的操作。

  最后, LIBTOOLFLAGSLIBTOOLFILES 可以用来替换最常修改的参数, 以及将被 libtool 修补的文件。 多数 port 不需要这样做。 请参见 bsd.autotools.mk 以了解进一步的细节。

6.4.3 libltdl

  一些 ports 会使用 libltdl 库, 后者是 libtool 软件包的一部分。 使用这个库并不意味着必须使用 libtool 本身, 因此提供了另一组结构。

USE_AUTOTOOLS= libltdl:版本

  目前, 这一设置所做的全部工作是将 LIB_DEPENDS 设置为适当的 libltdl port, 并作为一项方便的功能, 协助开发人员消除在 USE_AUTOTOOLS 框架以外的, 对于 autotools port 的依赖。 这个工具并不提供其它的操作符。

6.4.4 autoconfautoheader

  某些 port 并没有直接提供 configure 脚本, 但包含了作为 autoconf 模板的 configure.ac 文件。 可以用下列设置来要求 autoconf 创建 configure 脚本, 并使用 autoheader 来为 configure 脚本创建模板头文件。

USE_AUTOTOOLS=	autoconf:版本[:env]

  以及

USE_AUTOTOOLS=	autoheader:版本

  上述设置会暗含使用 autoconf:版本

  对于 libtool, 设置与前面类似。 如果指定可选的 :env 操作符, 则表示只设置用于后续工作的环境。 如果不指定, 则会对 port 进行相应的修补和重新配置。

  其它的可选变量, 如 AUTOCONF_ARGSAUTOHEADER_ARGS 可以通过 port 的 Makefile 来显式地指定替换。 类似 libtool, 多数 port 并不需要这样做。

6.4.5 automakeaclocal

  某些软件包只提供了 Makefile.am 文件。 这些文件必须首先用 automake 转换为 Makefile.in 并使用 configure 来生成实际的 Makefile

  类似地, 偶尔会有一些软件包不提供联编所需的 aclocal.m4 文件。 这些文件可以通过使用 aclocal 来扫描 configure.acconfigure.in 自动生成。

  aclocalautomake 有和 autoheaderautoconf 在前面一节中所介绍的相类似的关系。 aclocal 会暗含使用 automake, 因此:

USE_AUTOTOOLS=	automake:版本[:env]

  和

USE_AUTOTOOLS=	aclocal:版本

  也自动暗含使用 automake:版本

  与 libtool 类似, autoconf 如果使用了可选的 :env 操作符表示仅仅设置用于后续使用的环境, 如果不设置, 则会对 port 进行重新配置。

  对于 autoconfautoheader 而言, automakeaclocal 提供了对应的可选参数变量 AUTOMAKE_ARGSACLOCAL_ARGS, 如果需要的话, 可以在 port 的 Makefile 中指定。

若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题, 请致函 <doc@FreeBSD.org>。