6.3. 联编机制

6.3.1. Ports 的并行联编

FreeBSD ports 框架支持使用多个 make 子进程来进行并行编译, 在 SMP 上这可以全面地利用系统的 CPU 计算能力, 令 port 的联编过程更快、 更有效率。

目前这是通过向原作者的代码传递 make(1) 参数 -jX 来实现的。 遗憾的是, 并不是所有的 port 都能够很好地处理这个选项。 因此, 必须通过明确地在 Makefile 中指定 MAKE_JOBS_SAFE=yes 来启用这一功能。

从 port 监护人的角度还有一个控制的方法是设置 MAKE_JOBS_UNSAFE=yes 变量。 这个变量主要是用于已知不能与 -jX 配合使用的 port, 即使用户在 /etc/make.conf 中定义了 FORCE_MAKE_JOBS=yes 变量, 系统也不会使用并行编译。

6.3.2. makegmake, 以及 imake

如果 port 用到了 GNU make, 应设置 USE_GMAKE=yes

表 6.1. 与 gmake 有关的 port 变量
变量意义
USE_GMAKE此 port 需要使用 gmake 来完成联编过程。
GMAKE不在 PATH 中时, gmake 的完整路径。

对于 X 应用程序的 port, 如果它使用 imake 根据 Imakefile 文件来生成 Makefile, 则应设置 USE_IMAKE=yes。 这会使联编过程中的配置 (configure) 阶段自动执行 xmkmf -a。 如果 -a 标志会给您的 port 带来麻烦, 则需设置 XMKMF=xmkmf。 如果 port 用到了 imake 但并不使用 install.man target, 则应设置 NO_INSTALL_MANPAGES=yes

如果 port 源文件的 Makefile 的主联编 target 是 all 以外的名字, 应对应地设置 ALL_TARGET。 对于 install 而言, 对应的变量是 INSTALL_TARGET

6.3.3. configure 脚本

假如 port 使用 configure 脚本来从 Makefile.in 生成 Makefile 文件, 需要设置 GNU_CONFIGURE=yes。 如果希望传额外的参数给 configure 脚本 (默认参数为 --prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}), 应通过 CONFIGURE_ARGS 来指定这些参数。 类似地, 可以通过 CONFIGURE_ENV 变量来传递一些环境变量。

如果您的软件包使用 GNU configure, 而生成的可执行文件命名方式 怪异i386-portbld-freebsd4.7-应用程序名, 则需要更进一步地通过改变 CONFIGURE_TARGET 变量来按照较新版本的 autoconf 生成的脚本所希望的方式指定 target。 其方法是, 紧随 MakefileGNU_CONFIGURE=yes 一行之后加入:

CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}

表 6.2. 用于用到了 configure 脚本的 port 的变量
变量意义
GNU_CONFIGURE此 port 需要用 configure 脚本来准备联编。
HAS_CONFIGUREGNU_CONFIGURE 类似, 但默认的 configure target 并不加入 CONFIGURE_ARGS
CONFIGURE_ARGS希望传给 configure 脚本的额外参数。
CONFIGURE_ENV希望在执行 configure 脚本时设置的环境变量。
CONFIGURE_TARGET替换默认的 configure target。 其默认值是 ${MACHINE_ARCH}-portbld-freebsd${OSREL}

6.3.4. 使用 scons

如果您的 port 使用 SCons, 就需要定义 USE_SCONS=yes 了。

表 6.3. 使用 scons 的 port 会用到的变量
变量含义
SCONS_ARGS当前 port 希望传给 SCons 环境的参数。
SCONS_BUILDENV希望在系统环境中设置的变量。
SCONS_ENV希望在 SCons 环境中设置的变量。
SCONS_TARGET传递给 SCons 的最后一个参数, 类似于 MAKE_TARGET

如果希望让第三方的 SConstruct 尊重通过 SCONS_ENV (其中最重要的是 CC/CXX/CFLAGS/CXXFLAGS 配置) 传给 Scons 的配置, 则需要对 SConstruct 进行修改, 使联编的 Environment 按下列方式建立:

env = Environment(**ARGUMENTS)

其后, 可以通过 env.Appendenv.Replace 来对它进行修改。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.