FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • 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. 第 8 章 高级 pkg-plist 实践

8.1.根据 make 变量对 pkg-plist 进行修改

上一页7.5.USES=lua 和 Flavors下一页8.2.空目录

最后更新于9天前

某些 Port,尤其是以 p5- 开头的 Port,需要根据配置的选项(或 p5- Port 中 perl 的版本)更改其 pkg-plist。为简化此操作,pkg-plist 中出现的 %%OSREL%%、%%PERL_VER%% 和 %%PERL_VERSION%% 会被自动替换为适当的值。%%OSREL%% 的值是操作系统的数字版本(例如 4.9);%%PERL_VERSION%% 和 %%PERL_VER%% 是 perl 的完整版本号(例如 5.8.9)。还有其他一些与 Port 文档文件相关的 %%VARS%% 替换项,在中有说明。

要进行自定义替换,可以在 Makefile 中设置 PLIST_SUB 为 VAR=VALUE 形式的列表,pkg-plist 中出现的 %%VAR%% 就会被替换为 VALUE。

例如,如果一个 Port 在按版本划分的子目录中安装了多个文件,可以使用占位符表示版本号,这样 Port 升级时就无需每次都重新生成 pkg-plist。可以这样设置:

OCTAVE_VERSION=	${PORTREVISION}
PLIST_SUB=	OCTAVE_VERSION=${OCTAVE_VERSION}

然后在 pkg-plist 中使用 %%OCTAVE_VERSION%% 来代表版本号出现的位置。这样当 Port 升级时,就无需编辑成百上千的 plist 行。

如果文件的安装是取决于 Port 的选项设置,则常见的处理方法是在 pkg-plist 行前加上 %%OPT%%(表示启用该选项时需要安装该文件),或 %%NO_OPT%%(表示禁用该选项时需要安装该文件),并在 Makefile 中添加 OPTIONS_SUB=yes。详见 。

例如,如果有些文件只在启用了 X11 选项时才安装,并且 Makefile 中有:

OPTIONS_DEFINE=	X11
OPTIONS_SUB=	yes

则在 pkg-plist 中,应在仅在启用该选项时才安装的行前加上 %%X11%%,例如:

%%X11%%bin/foo-gui

这种替换是在 pre-install 和 do-install 阶段之间完成的,通过读取 PLIST 并写入 TMPPLIST(默认值为 WRKDIR/.PLIST.mktmp)。因此,如果 Port 是动态构建 PLIST,则必须在 pre-install 或之前完成此操作。如果需要修改生成后的文件,应在 post-install 阶段操作,并针对 TMPPLIST 文件。

另一种修改 Port 安装清单的方式是设置变量 PLIST_FILES 和 PLIST_DIRS。它们的值被视为路径列表,将连同 PLIST 内容一并写入 TMPPLIST。尽管这些名称同样支持 %%VAR%% 替换,但建议直接使用 ${VAR}。除此之外,PLIST_FILES 中的名称会原样出现在最终的安装清单中,而 PLIST_DIRS 中的名称前会加上 @dir。这两个变量必须在写入 TMPPLIST 之前设置,也就是要在 pre-install 或更早的时候设置。

有时,仅使用 OPTIONS_SUB 并不够。在这些情况下,可以在 Makefile 的 PLIST_SUB 中为某个特定 TAG 设置特殊值 @comment,从而使打包工具忽略对应的行。例如,某些文件只在启用了 X11 且架构为 i386 时才会被安装,可以这样设置:

.include <bsd.port.pre.mk>

.if ${PORT_OPTIONS:MX11} && ${ARCH} == "i386"
PLIST_SUB+=	X11I386=""
.else
PLIST_SUB+=	X11I386="@comment "
.endif
相关章节
OPTIONS_SUB