FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • FreeBSD Port 开发者手册翻译项目
  • 编辑日志
  • 译者说明
  • FreeBSD Port 开发者手册
    • FreeBSD Port 开发者手册
  • 第 1 章 简介
    • 1.1.简介
  • 第 2 章 制作新的 port
    • 2.1.制作新的 port
  • 第 3 章 简单的 port
    • 3.1.编写 Makefile
    • 3.2.编写描述文件
    • 3.3.创建校验和文件
    • 3.4.测试 port
    • 3.5.用 portlint 来检查 port
    • 3.6.提交新的 port
  • 第 4 章 复杂的 Port
    • 4.1 Port 工作原理
    • 4.2.获取源代码
    • 4.3.修改 port
    • 4.4.打补丁
    • 4.5.配置
    • 4.6.处理用户输入
  • 第 5 章 配置 Makefile
    • 5.1.原始来源
    • 5.2.命名
    • 5.3.归类
    • 5.4.源代码包文件
    • 5.5.维护者(MAINTAINER)
    • 5.6.一句话说明(COMMENT)
    • 5.7.项目网站
    • 5.8.许可证
    • 5.9.PORTSCOUT
    • 5.10.依赖
    • 5.11.从属 port 和 MASTERDIR
    • 5.12.man 手册
    • 5.13.info 文件
    • 5.14.Makefile 参数
    • 5.15.特殊的工作目录
    • 5.16.解决冲突
    • 5.17.安装文件
    • 5.18. 使用 BINARY_ALIAS 来重命名命令,而不是在编译中打补丁
  • 第 6 章 特殊情况
    • 第 6 章 特殊情况
  • 第 7 章 Flavors
    • 7.1.Flavors 简介
    • 7.2.使用 FLAVORS
    • 7.3.USES=php 和 Flavors
    • 7.4.USES=python 和 Flavors
    • 7.5.USES=lua 和 Flavors
  • 第 8 章 高级 pkg-plist 实践
    • 8.1.根据 make 变量对 pkg-plist 进行修改
    • 8.2.空目录
    • 8.3.配置文件
    • 8.4.动态与静态软件包列表
    • 8.5.自动创建软件包列表
    • 8.6.用关键词扩展软件包列表
  • 第 9 章 pkg-*
    • 9.1.pkg-message(安装二进制包时显示的消息文件)
    • 9.2.pkg-install、pkg-pre-install 和 pkg-post-install(安装二进制包时执行的脚本文件)
    • 9.3.pkg-deinstall、pkg-pre-deinstall 和 pkg-post-deinstall(卸载时执行的脚本文件)
    • 9.4.修改 pkg-* 文件的名字
    • 9.5.使用 SUB_FILES 和 SUB_LIST
  • 第 10 章 测试 port
    • 10.1.运行 make describe
    • 10.2.运行 make test
    • 10.3.Portclippy / Portfmt
    • 10.4.Portlint
    • 10.5.Port 工具
    • 10.6.PREFIX 和 DESTDIR
    • 10.7.Poudriere
    • 10.8.调试 port
  • 第 11 章 升级 port
    • 11.1.使用 Git 制作补丁
    • 11.2.UPDATING 和 MOVED
  • 第 12 章 安全
    • 12.1.安全为何如此重要
    • 12.2.修复安全漏洞
    • 12.3.向社区通报情况
  • 第 13 章 该做什么和不该做什么
    • 第 13 章 该做什么和不该做什么
  • 第14章 一个简单的 port
    • 第 14 章 一个简单的 port
  • 第 15 章 在 Port Makefile 中变量的顺序
    • 第 15 章 在 Port Makefile 中变量的顺序
  • 第 16 章 保持更新
    • 第 16 章 保持更新
  • 第 17 章 使用 USES 宏
    • 第 17 章 使用 USES 宏
  • 第 18 章 __FreeBSD_version 的值
    • 第 18 章 __FreeBSD_version 的值
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
在GitHub上编辑
导出为 PDF
  1. 第 7 章 Flavors

7.2.使用 FLAVORS

要声明一个具有多个 flavor 的 Port,需要在其 Makefile 中添加 FLAVORS。FLAVORS 中的第一个 flavor 是默认的 flavor。

技巧

同时定义 FLAVOR 为 FLAVOR?= ${FLAVORS:[1]} 有助于简化 Makefile 的逻辑。

重要

为了将 flavor 与总是大写字母的选项区别开来,flavor 名称只能包含小写字母、数字和下划线 _。

示例 1:基本的 Flavors 用法

如果某个 Port 有一个“精简版”从属 Port,那么可以移除该从属 Port,并将该 Port 转换为 flavors,如下所示:

FLAVORS=	default lite
lite_PKGNAMESUFFIX=	-lite
[...]
.if ${FLAVOR:U} != lite
[启用非 lite 功能]
.endif

示例 2:另一种基本的 Flavors 用法

如果某个 Port 有一个 -nox11 从属 Port,那么可以移除该从属 Port,并将该 Port 转换为 flavors,如下所示:

FLAVORS=	x11 nox11
FLAVOR?=	${FLAVORS:[1]}
nox11_PKGNAMESUFFIX=	-nox11
[...]
.if ${FLAVOR} == x11
[启用 x11 功能]
.endif

示例 3:更复杂的 Flavors 用法

USES=		gnome python
USE_PYTHON=	flavors

.if ${FLAVOR:Upy27:Mpy2*}
USE_GNOME=	pygobject3

CONFIGURE_ARGS+=	--enable-python2 --disable-python3

BUILD_WRKSRC=	${WRKSRC}/loaders/python
INSTALL_WRKSRC=	${WRKSRC}/loaders/python
.else # py3*
USE_GNOME+=	py3gobject3

CONFIGURE_ARGS+=	--disable-python2 --enable-python3 \
			ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config

BUILD_WRKSRC=	${WRKSRC}/loaders/python3
INSTALL_WRKSRC=	${WRKSRC}/loaders/python3
.endif

py34_PLIST=	${.CURDIR}/pkg-plist-py3
py35_PLIST=	${.CURDIR}/pkg-plist-py3
py36_PLIST=	${.CURDIR}/pkg-plist-py3

7.2.1. Flavors 辅助机制

为了简化 Makefile 的编写,提供了一些 flavors 的辅助机制。

以下这些辅助机制会设置对应变量的值:

  • flavor_PKGNAMEPREFIX

  • flavor_PKGNAMESUFFIX

  • flavor_PLIST

  • flavor_DESCR

以下这些辅助机制会追加到对应变量中:

  • flavor_CONFLICTS

  • flavor_CONFLICTS_BUILD

  • flavor_CONFLICTS_INSTALL

  • flavor_PKG_DEPENDS

  • flavor_EXTRACT_DEPENDS

  • flavor_PATCH_DEPENDS

  • flavor_FETCH_DEPENDS

  • flavor_BUILD_DEPENDS

  • flavor_LIB_DEPENDS

  • flavor_RUN_DEPENDS

  • flavor_TEST_DEPENDS

示例 4:为特定 flavor 设置 PKGNAME

由于所有的包必须具有不同的包名,因此 flavors 必须修改各自的包名,使用 flavor_PKGNAMEPREFIX 和 flavor_PKGNAMESUFFIX 可以轻松实现:

FLAVORS=	normal lite
lite_PKGNAMESUFFIX=	-lite
上一页7.1.Flavors 简介下一页7.3.USES=php 和 Flavors

最后更新于18天前

以下是经过略微修改的 的一段内容节选,这是一个使用了 的 Port。由于默认的 Python 2 和 3 版本是 2.7 和 3.6,它会自动获得 FLAVORS=py27 py36

这个 Port 没有使用 USE_PYTHON=distutils,但仍然需要 Python flavors。为了防止 FLAVOR 为空(这会导致 出错),应在字符串比较中使用 ${FLAVOR:U} 而不是 ${FLAVOR}。Gnome 的 Python gobject3 绑定在 Python 2 和 Python 3 中名称不同,分别为 pygobject3 和 py3gobject3。虽然 configure 脚本必须在 ${WRKSRC} 中运行,但我们只关心构建和安装 Python 2 或 Python 3 部分,因此需要相应地设置构建和安装的基础目录。同时需要提示正确的 Python 3 config 脚本路径名。使用 Python 3 构建时的打包清单是不同的,由于可能有三个 Python 3 版本,因此要使用 为这三个版本设置 PLIST。

devel/libpeas
Python flavors
make(1)
辅助机制