版权所有© 1994-1996、1999-2002、2004-2016 自由软件基金会
简单地说,shell 命令 './configure && make && make install'
将会配置、构建和安装这个包。下列更详细的说明是一般性的;有关此包的特定说明,请参阅 'README'
文件。有些包提供了这个 'INSTALL'
文件,但没有实现下面列出的所有特性。给定包中缺少可选特性并不一定是 bug。有关 GNU 包的更多建议可以在 *note Makefile Conventions
中找到:(标准) Makefile 约定。
'configure'
shell 脚本尝试猜测编译期间使用的各种系统相关变量的正确值。它使用这些值在包的每个目录中创建一个 'Makefile'
。它也可能创建一个或多个 '.h'
文件,这些文件包含系统相关定义。最后,它创建一个 shell 脚本 'config.status'
,您可以在将来运行此脚本以重新创建当前配置;它还将创建一个文件 'config.log'
,此文件包含编译器的输出(主要用于调试 'configure'
)。
它还可以使用一个可选文件(通常称为 'config.cache'
,可以使用 '--cache-file=config.cache'
或简单的 '-C'
来启用),此文件保存测试结果,以加快重新配置。默认情况下 cache 被禁用,以防止意外使用过期 cache 文件时出现问题。
如果您需要做一些不寻常的事情来编译包,请尝试找出 'configure'
如何检查是否要做这些事情,并将差异或说明发送邮件到 'README'
中给出的地址,以便在下一个版本中考虑它们。如果您正在使用 cache,并且在某个点 'config.cache'
包含您不想保存的结果,您可以删除或编辑它。
文件 'configure.ac'
(或 'configure.in'
)被一个名为 'autoconf'
的程序使用以创建 'configure'
。如果你想使用一个较新版本的 'autoconf'
改变它或重新生成 'configure'
,你需要 'configure.ac'
。
编译这个包最简单的方法是:
'cd'
包含包的源代码的目录,键入 './configure'
来为您的系统配置包。'make'
编译包。'make check'
来运行包附带的任何自我测试,通常使用刚刚构建的卸载二进制文件。'make install'
来安装程序和任何数据文件和文档。在安装到 root 拥有的前缀时,建议将包为普通用户配置和构建,并且仅使用 root 特权执行 'make install'
命令。'make installcheck'
来重复任何自我测试,但这次要在最终安装位置使用二进制文件。此命令不安装任何东西。以普通用户的身份运行此目标,特别是如果先前的 'make install'
需要 root 特权,将验证安装是否正确完成。'make clean'
从源代码目录中删除程序二进制文件和目标文件。要删除 ‘configure’ 创建的文件(以便您可以为另一种计算机编译包),键入 'make distclean'
。还有一个 'make maintainer-clean'
命令,但主要是针对包的开发人员。如果您使用它,您可能必须获得各种各样的其他程序,以便重新生成随发行版而来的文件。'make uninstall'
来再次删除已安装的文件。实际上,并不是所有的包都测试过 uninstall 是否正确工作,即使 GNU 编码标准要求。'make distcheck'
,开发人员可以使用它来测试所有其他命令,比如 ‘make install’ 和 ‘make uninstall’ 是否正常工作。该命令通常不由最终用户运行。有些系统需要不寻常的选项来编译或链接,而 ‘configure’ 脚本并不知道这些选项。运行 './configure --help'
获取一些相关环境变量的详细信息。
您可以通过在命令行或环境中设置变量来为配置参数提供 ‘configure’ 初始值。举个例子:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
参见第 9 章 定义变量 ,以获得更多细节。
通过将用于每种体系结构的目标文件放在它们自己的目录中,您可以同时为多种计算机编译包。为此,您可以使用 GNU 'make'
。'cd'
您希望目标文件和可执行文件将生成的目录,运行 'configure'
脚本。‘configure’ 会自动检查目录中的源代码,‘configure’ 所在的目录和 ‘…’。这就是所谓的 “VPATH” 构建。
使用非 GNU 'make'
,在源代码目录中一次编译一个架构的包会更安全。在为一个体系结构安装包之后,在为另一个体系结构重新配置之前使用 'make distclean'
。
在 MacOS X 10.5 及更高版本的系统上,您可以通过向编译器指定多个 ‘-arch’ 选项,而只向预处理器指定一个 ‘-arch’ 选项,来创建可以在多种系统类型上工作的库和可执行程序(称为 “fat” 或 “universal” 二进制文件)。命令如下
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
这并不能保证在所有情况下都能产生工作输出,如果有问题,您可能必须一次构建一个架构并使用 'lipo'
工具组合结果。
默认情况下,‘make install’ 会将包的命令安装在 ‘/usr/local/bin’ 下,include 文件安装在 ‘/usr/local/bin’ 下,等等。您可以指定一个安装前缀,而不是 ‘/usr/local’,方法是给 ‘configure’ 指定选项 '--prefix=PREFIX'
,其中 PREFIX
必须是一个绝对文件名。
您可以为特定于体系结构的文件和独立于体系结构的文件指定单独的安装前缀。如果您为 ‘configure’ 指定选项 '--exec-prefix=PREFIX'
,则包使用 PREFIX
作为安装程序和库的前缀。文档和其他数据文件仍然使用常规前缀。
此外,如果使用不同寻常的目录布局,可以使用 '--bindir=DIR'
等选项为特定类型的文件指定不同的值。运行 'configure --help'
,查看您可以设置的目录列表以及其中包含哪些文件。一般来说,这些选项的默认值是用 '${prefix}'
表示的,因此只指定 '--prefix'
将影响没有显式提供的所有其他目录规范。
影响安装位置的最便携方式是将正确的位置传递给 ‘configure’;然而,许多包提供以下一种或两种快捷方式,将变量赋值传递给 ‘make install’ 命令行,以更改安装位置,而无需重新配置或重新编译。
'make install prefix=/alternate/directory'
将为用 '${prefix}'
表示的所有目录配置变量选择一个备用位置。在 'configure'
期间指定但不是用 '${prefix}'
表示的任何目录都必须在安装时覆盖,以便重新定位整个安装。GNU 编码标准要求使用 makefile 变量覆盖每个目录变量的方法,理想情况下不会导致重新编译。然而,一些平台已经知道共享库的语义的局限性,当使用这种方法时,最终需要重新编译,尤其是在使用 GNU Libtool 的包中。'make install DESTDIR=/alternate/directory'
将在所有安装名称之前加上 ‘/alternate/directory’。'DESTDIR'
覆盖的方法不是 GNU 编码标准所要求的,也不能在具有驱动字母的平台上工作。另一方面,它在避免重新编译方面做得更好,即使在 'configure'
时没有以 '${prefix}'
形式指定某些目录选项,它也能很好地工作。如果包支持它,您可以通过向 ‘configure’ 提供选项 '--program-prefix=PREFIX'
或 '--program-suffix=SUFFIX'
,使程序在名称上附加前缀或后缀。
有些包为 ‘configure’ 提供了 '--enable-FEATURE'
选项,其中 FEATURE
表示包的可选部分。他们可能还提供了 '--with-PACKAGE'
选项,其中 PACKAGE
类似于 'gnu-as'
或 'x'
(用于 x Window System)。‘README’ 会说明包能识别的所有 ‘–enable-’ 和 ‘–with-’ 选项。
对于使用 X Window System 的包,‘configure’ 通常可以自动找到 X include 和 library 文件,但是如果没有找到,可以使用 ‘configure’ 选项 '--x-includes=DIR'
和 '--x-libraries=DIR'
来指定它们的位置。
有些包提供了配置 'make'
执行的详细程度的功能。对于这些包,运行 './configure --enable-silent-rules'
将默认值设置为最小输出,可以用 'make V=1'
覆盖该值;运行 './configure --disable-silent-rules'
将默认值设置为 verbose,可以使用 'make V=0'
覆盖该值。
在 HP-UX 上,默认的 C 编译器不兼容 ANSI C。如果没有安装 GNU CC,建议使用以下选项来使用 ANSI C 编译器:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
如果这不起作用,请安装用于 HP-UX 的 GCC 预构建二进制文件。
HP-UX ‘make’ 更新目标具有与其先决条件相同的时间戳,这使得它在涉及到生成的文件(如 ‘configure’)时通常不可用。而是使用 GNU 的 ‘make’。
在 OSF/1 a.k.a. Tru64 上,默认 C 编译器的某些版本无法解析它的 '
头文件。选项 ‘-nodtk’ 可以作为一个变通办法。如果没有安装 GNU CC,建议您试试:
./configure CC="cc"
如果这不起作用,那就试试:
./configure CC="cc -nodtk"
在 Solaris 上,不要将 ‘/usr/ucb’ 放在 ‘PATH’。这个目录包含几个功能失调的程序;这些程序的工作变体可以在 ‘/usr/bin’ 中找到。因此,如果您需要 ‘/usr/ucb’ 在您的 ‘PATH’ 中,把它放在 _after_ '/usr/bin'
中。
在 Haiku 中,为所有用户安装的软件进入 ‘/boot/common’,而不是 ‘/usr/local’。建议使用以下选项:
./configure --prefix=/boot/common
可能有一些特性 ‘configure’ 不能自动计算出来,但需要根据包将运行的机器类型来确定。通常,假设构建的包运行在 _same_
体系结构上,‘configure’ 可以解决这个问题,但是如果它打印一条消息说它猜不出机器的类型,那么就给它 ‘–build=TYPE’ 选项。TYPE
可以是系统类型的短名称,如 ‘sun4’,也可以是具有以下形式的规范名称:CPU-COMPANY-SYSTEM。
SYSTEM 可以有以下一种形式:
参见文件 ‘config.sub’ 表示每个字段的可能值。如果 ‘config.sub’ 不包含在这个包中,那么这个包就不需要知道机器的类型。
如果您正在构建用于交叉编译的编译器工具,那么应该使用选项 ‘–target=TYPE’ 来选择它们将生成代码的系统类型。
如果你想使用一个交叉编译器,它为一个不同于构建平台的平台生成代码,你应该指定 “host” 平台(即生成的程序最终将在其上运行),并使用 ‘–host=TYPE’。
如果您想为 ‘configure’ 脚本设置默认值以便共享,可以创建一个名为 ‘config.site’ 的站点 shell 脚本,此脚本为变量 ‘CC’、‘cache_file’ 和 ‘prefix’ 提供默认值。‘configure’ 查找 ‘PREFIX/share/config.site’,如果它存在的话,然后查找 ‘PREFIX/etc/config.site’,如果它存在的话。或者,您可以将 ‘CONFIG_SITE’ 环境变量设置为站点脚本的位置。警告:并非所有的 ‘configure’ 脚本都查找一个站点脚本。
没有在站点 shell 脚本中定义的变量可以在传递给 ‘configure’ 的环境中设置。但是,有些包可能在构建过程中再次运行 configure,这些变量的自定义值可能会丢失。为了避免这个问题,您应该在 ‘configure’ 命令行中使用 ‘VAR=value’ 设置它们。例如:
./configure CC=/usr/local2/bin/gcc
使指定的 ‘gcc’ 用作 C 编译器(除非在站点 shell 脚本中重写了它)。
不幸的是,由于 Autoconf 的限制,这种技术不适用于 ‘CONFIG_SHELL’。在限制解除之前,你可以使用以下方法:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
‘configure’ 识别以下选项来控制它的操作方式。
‘configure’ 还接受其他一些不太有用的选项。运行 ‘configure --help’ 获得更多细节。