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
变量, 系统也不会使用并行编译。
如果 port 用到了 GNU make, 应设置
USE_GMAKE=yes
。
对于 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
。
假如 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。
其方法是, 紧随 Makefile
中 GNU_CONFIGURE=yes
一行之后加入:
CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
configure
脚本的 port 的变量变量 | 意义 |
---|---|
GNU_CONFIGURE | 此 port 需要用 configure 脚本来准备联编。 |
HAS_CONFIGURE | 与 GNU_CONFIGURE 类似,
但默认的 configure target 并不加入
CONFIGURE_ARGS 。 |
CONFIGURE_ARGS | 希望传给
configure 脚本的额外参数。 |
CONFIGURE_ENV | 希望在执行 configure
脚本时设置的环境变量。 |
CONFIGURE_TARGET | 替换默认的 configure target。 其默认值是
${MACHINE_ARCH}-portbld-freebsd${OSREL} 。 |
如果您的 port 使用 SCons, 就需要定义
USE_SCONS=yes
了。
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.Append
和
env.Replace
来对它进行修改。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.