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. 第5章 配置 Makefile

5.16.解决冲突

上一页5.15.特殊的工作目录下一页5.17.安装文件

最后更新于2天前

有三个不同的变量用于注册包和 Port 之间的冲突:CONFLICTS、CONFLICTS_INSTALL 和 CONFLICTS_BUILD。

注意

冲突变量会自动设置 IGNORE 变量,详细说明请参见 。

在删除多个冲突的 Port 之一时,建议在其他 Port 中保留 CONFLICTS 变量几个月,以便适应那些偶尔更新的用户。

CONFLICTS_INSTALL 如果包无法与其他包共存(由于文件冲突、运行时不兼容等)。CONFLICTS_INSTALL 检查在构建阶段后,安装阶段前进行。

CONFLICTS_BUILD 如果 Port 无法在安装了其他特定 Port 的情况下构建。构建冲突不会被记录到结果包中。

CONFLICTS 如果在某个 Port 已安装的情况下,该 Port 无法构建,且结果包无法与其他包共存。CONFLICTS 检查在构建阶段前和安装阶段前进行。

CONFLICTS* 变量值中的每个由空格分隔的项都会与包进行匹配,除了正在构建的包,使用的是 shell 通配符规则。这允许列出 Port 的所有变体作为冲突项,而不需要排除正在构建的变体。例如,如果安装了 git-lite,CONFLICTS_INSTALL=git git-lite 将允许执行:

% make -C devel/git FLAVOR=lite all deinstall install

但是以下命令会报告冲突,因为安装的包基础名称是 git-lite,而 git 将被构建,但无法与 git-lite 一起安装:

% make -C devel/git FLAVOR=default all deinstall install

如果没有这个功能,Makefile 将需要为每个变体添加一个 _flavor__CONFLICTS_INSTALL,列出每个其他变体。

这些变量最常见的内容是另一个 Port 的包基础名。包基础名是没有附加版本的包名,可以通过运行 make -V PKGBASE 获取。

示例 46. CONFLICTS* 的基本用法

不能与 一起安装,因为它们安装了相同的文件。首先获取要使用的包基础名:

% make -C dns/bind99 -V PKGBASE
bind99
% make -C dns/bind910 -V PKGBASE
bind910
CONFLICTS_INSTALL=	bind910
CONFLICTS_INSTALL=	bind99

有时,只有另一个 Port 的某些版本是不兼容的。当发生这种情况时,请使用完整的包名,包括版本。如果有必要,可以使用 shell 通配符,如 * 和 ?,以便匹配所有必要的版本。

示例 47. 使用通配符的 CONFLICTS*

CONFLICTS_INSTALL=	gnotime-2.[0-3]* \
			gnotime-2.4.0* gnotime-2.4.1 \
			gnotime-2.4.1_[12]

第一个条目匹配版本 2.0 到 2.3,第二个条目匹配所有 2.4.0 版本,第三个条目匹配精确的 2.4.1 版本,最后一个条目匹配 2.4.1 版本的第一个和第二个修订版。

DISABLE_CONFLICTS 变量可在执行不受冲突影响的目标时暂时设置。此变量不应在 Port 的 Makefile 中设置。

% make -DDISABLE_CONFLICTS patch

然后在 的 Makefile 中添加:

并在 的 Makefile 中添加:

从 2.0 版本到 2.4.1_2 版本, 曾经安装一个捆绑的 版本。

为了反映这一点, 的 Makefile 包含:

没有任何冲突行,因为它的当前版本与其他任何版本不冲突。

使用 BROKEN 标记 Port 为不可安装
dns/bind99
dns/bind910
dns/bind99
dns/bind910
deskutils/gnotime
databases/qof
databases/qof
deskutils/gnotime