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