5.11 Makefile 选项

某些大型应用程序可以在构建时使用一系列配置选项, 用以在系统中已经安装了某些库或应用程序时增加一些功能。 例如, 选择某种自然 (人类的) 语言, GUI 或命令行界面, 由于并不是所有的用户都希望使用这些库或者应用程序, port 系统提供了一组方便的机制, 来让 port 的作者控制构建时的配置。 支持这些特性可以让用户体验更好, 并达到事半功倍的效果。

5.11.1 开关 (KNOBS)

5.11.1.1 WITH_*WITHOUT_*

这些变量是为系统管理员准备的。 许多这样的变量被标准化并置于 ports/Mk/bsd.*.mk; 也有一些没有, 这可能会比较令人困惑。 如果您需要增加类似的配置变量, 请考虑使用下表中的变量。

注意: 您不应假定每一个 WITH_* 都会有对应的 WITHOUT_* 变量, 反之亦然。 一般而言, 会使用默认值。

注意: 除非另有说明, 这些变量都是测试是否定义, 而不是它们设置了 YESNO

表 5-2. WITH_*WITHOUT_* 变量

变量 意义
WITH_APACHE2 如果定义了这个变量, 则使用 www/apache2 而不是默认的 www/apache
WITH_BERKELEY_DB 这个变量表示所用的 Berkeley 数据库软件包版本, 例如 databases/db41WITH_BDB_VER 可以取的值包括 2、 3、 4、 41 和 42。
WITH_MYSQL 这个变量用于指定所用的 MySQL 数据库软件包的版本, 例如 databases/mysql40-serverWANT_MYSQL_VER 可以取的值, 包括 323、 40、 41 和 50。
WITHOUT_NLS 表示不需要国际化支持, 这可以节省编译所消耗的时间。 默认情况下, 会启用国际化支持。
WITH_OPENSSL_BASE 使用基本系统中的 OpenSSL 版本。
WITH_OPENSSL_PORT 使用从 security/openssh 中安装的 OpenSSL 版本, 并覆盖原先随基本系统安装的 OpenSSL 版本。
WITH_POSTGRESQL 这个变量用于指定所需的 PostGreSQL 数据库软件包的版本, 例如 databases/postgresql72
WITHOUT_X11 如果 port 能够在是否包含 X 支持的情况下分别构建, 则一般情况应该默认以包含 X 支持的配置来构建。 如果定义了这一变量, 则应构建不包含 X 支持的版本。

5.11.1.2 开关 (knob) 的命名

我们建议 port 的开发人员使用相似的开关, 以便最终用户使用, 并减少开关名称的总数。 最为常用的开关名字可以在 KNOBS 文件中找到。

开关的名字应反映其功能。 如果 port 的 PORTNAME 包括 lib- 前缀, 则开关名中应删去 lib- 前缀。

5.11.2 OPTIONS (菜单式可选项)

5.11.2.1 背景

OPTIONS 将为正在安装 port 的用户提供一个包含可用选项的对话框, 并将用户的选择保存到 /var/db/ports/portname/options 中。 下次重新联编 port 时, 这些选项将被再次使用。 这样一来, 就不需要劳神去记忆您之前联编 port 时的那几十个 WITH_*WITHOUT_*选项了!

当用户运行 make config (或首次运行 make build) 时, 框架会首先检查 /var/db/ports/portname/options。 如果这个文件不存在, 则它会使用 OPTIONS 的值来生成一个可以启用或禁用各个选项的对话框。 随后, 用户的选择将保存到 options 文件中, 并被用于联编 port。

使用 make showconfig 可以查看保存的配置。 此外, make rmconfig 可以删除已经保存的配置。

5.11.2.2 语法

OPTIONS 变量的语法是:

OPTIONS=   OPTION  "说明性文字" 默认值 ...
默认值必须是 ONOFF 之一。 这种三元组可以使用多次。

定义 OPTIONS 变量的值, 必须在引用 bsd.port.pre.mk 之前定义。 而 WITH_*WITHOUT_* 只有在引用了 bsd.port.pre.mk 之后才能开始检测。 由于基础支持框架的一些缺陷, 您只能使用 WITH_* 变量来检测那些默认值为 OFF 的选项, 而使用 WITHOUT_* 变量来检测那些默认值为 ON 的选项。

5.11.2.3 例子

例 5-7. 简单的 OPTIONS 用法

OPTIONS=      FOO "启用 foo 选项" On \
              BAR "支持 bar 功能" Off

.include <bsd.port.pre.mk>

.if defined(WITHOUT_FOO)
CONFIGURE_ARGS+=    --without-foo
.else
CONFIGURE_ARGS+=    --with-foo
.endif

.if defined(WITH_BAR)
RUN_DEPENDS+=   bar:${PORTSDIR}/bar/bar
.endif

.include <bsd.port.post.mk>


若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题, 请致函 <doc@FreeBSD.org>。