FreeBSD Porter 手册
上一页 | 第6章 　特殊情况 | 下一页

# 6.4 利用 GNU autotools

## 6.4.1 入门

众多 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 来达到这一目的。

## 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` 操作符， 则表示只设置环境， 而跳过其他的操作。

最后， `LIBTOOLFLAGS` 和 `LIBTOOLFILES` 可以用来替换最常修改的参数， 以及将被 `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 `autoconf` 和 `autoheader`

某些 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 并不需要这样做。

## 6.4.5 `automake` 和 `aclocal`

某些软件包只提供了 `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` 中指定。

上一页 | 起始页 | 下一页
联编机制 | 上一级 | 使用 GNU `gettext`

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