6.4. Using GNU autotools
前一頁 | 章 6. Special considerations | 下一頁

## 6.4. Using GNU autotools

### 6.4.1. Introduction

The various GNU autotools provide an abstraction mechanism for building a piece of software over a wide variety of operating systems and machine architectures. Within the Ports Collection, an individual port can make use of these tools via a simple construct:

USE_AUTOTOOLS= `tool`:`version`[:`operation`] ...

At the time of writing, `tool` can be one of `libtool`, `libltdl`, `autoconf`, `autoheader`, `automake` or `aclocal`.

`version` specifies the particular tool revision to be used (see `devel/{automake,autoconf,libtool}[0-9]+` for valid versions).

`operation` is an optional extension to modify how the tool is used.

Multiple tools can be specified at once, either by including them all on a single line, or using the `+=` Makefile construct.

Finally, there is the special tool, called `autotools`, which is a convenience function to bring in all available versions of the autotools to allow for cross-development work. This can also be accomplished by installing the `devel/autotools` port.

### 6.4.2. `libtool`

Shared libraries using the GNU building framework usually use `libtool` to adjust the compilation and installation of shared libraries to match the specifics of the underlying operating system. The usual practice is to use copy of `libtool` bundled with the application. In case you need to use external `libtool`, you can use the version provided by The Ports Collection:

USE_AUTOTOOLS= libtool:`version`[:env]

With no additional operations, `libtool:`version`` tells the building framework to patch the configure script with the system-installed copy of `libtool`. The `GNU_CONFIGURE` is implied. Further, a number of make and shell variables will be assigned for onward use by the port. See `bsd.autotools.mk` for details.

With the `:env` operation, only the environment will be set up.

Finally, `LIBTOOLFLAGS` and `LIBTOOLFILES` can be optionally set to override the most likely arguments to, and files patched by, `libtool`. Most ports are unlikely to need this. See `bsd.autotools.mk` for further details.

### 6.4.3. `libltdl`

Some ports make use of the `libltdl` library package, which is part of the `libtool` suite. Use of this library does not automatically necessitate the use of `libtool` itself, so a separate construct is provided.

USE_AUTOTOOLS= libltdl:`version`

Currently, all this does is to bring in a `LIB_DEPENDS` on the appropriate `libltdl` port, and is provided as a convenience function to help eliminate any dependencies on the autotools ports outside of the `USE_AUTOTOOLS` framework. There are no optional operations for this tool.

### 6.4.4. `autoconf` and `autoheader`

Some ports do not contain a configure script, but do contain an autoconf template in the `configure.ac` file. You can use the following assignments to let `autoconf` create the configure script, and also have `autoheader` create template headers for use by the configure script.

USE_AUTOTOOLS= autoconf:`version`[:env]

and

USE_AUTOTOOLS= autoheader:`version`

which also implies the use of `autoconf:`version``.

Similarly to `libtool`, the inclusion of the optional `:env` operation simply sets up the environment for further use. Without it, patching and reconfiguration of the port is carried out.

The additional optional variables `AUTOCONF_ARGS` and `AUTOHEADER_ARGS` can be overridden by the port `Makefile` if specifically requested. As with the `libtool` equivalents, most ports are unlikely to need this.

### 6.4.5. `automake` and `aclocal`

Some packages only contain `Makefile.am` files. These have to be converted into `Makefile.in` files using `automake`, and the further processed by `configure` to generate an actual `Makefile`.

Similarly, packages occasionally do not ship with included `aclocal.m4` files, again required to build the software. This can be achieved with `aclocal`, which scans `configure.ac` or `configure.in`.

`aclocal` has a similar relationship to `automake` as `autoheader` does to `autoconf`, described in the previous section. `aclocal` implies the use of `automake`, thus we have:

USE_AUTOTOOLS= automake:`version`[:`env`]

and

USE_AUTOTOOLS= aclocal:`version`

which also implies the use of `automake:`version``.

Similarly to `libtool` and `autoconf`, the inclusion of the optional `:env` operation simply sets up the environment for further use. Without it, reconfiguration of the port is carried out.

As with `autoconf` and `autoheader`, both `automake` and `aclocal` have optional argument variables, `AUTOMAKE_ARGS` and `ACLOCAL_ARGS` respectively, which may be overriden by the port `Makefile` if required.

前一頁 | 上一層 | 下一頁
6.3. Building mechanisms | 起始頁 | 6.5. Using GNU `gettext`

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。