CPack RPM 生成器¶
内置(二进制)CPack RPM 生成器(仅限 Unix)
特定于 CPack RPM 生成器的变量¶
CPack RPM 生成器可用于使用 CPack 创建 RPM 包。 CPack RPM 生成器是一个 CPack 生成器,因此它使用 CPack 使用的 CPACK_XXX 变量。
CPack RPM 生成器具有由特定变量控制的特定功能 CPACK_RPM_XXX 变量。
CPACK_RPM_<COMPONENT>_XXXX 变量可用于获得**组件特定**值。但是请注意,<COMPONENT> 指的是大写的**分组名称**。它可以是组件名称或组件 GROUP 名称。通常,这些变量对应于 RPM 规范文件实体。人们可以在这里找到关于规范文件的信息 https://rpm.org/documentation。
在 3.6 版本发生变更: <COMPONENT> 部分变量最好使用大写字母(例如,如果组件名为 foo 则使用 CPACK_RPM_FOO_XXXX 变量名格式)与其他 CPACK_< COMPONENT>_XXXX 变量。为了向后兼容(CMake/CPack 版本 3.5 及更低版本),对旧版本 CMake 中定义的变量仍然支持对相同封装组件的支持(例如,fOo 将用作 !CPACK_RPM_fOo_XXXX) /CPack 但不保证将来添加的变量。为了向后兼容,相同大小写的组件变量也会覆盖两者都存在的大写版本。
以下是一些 CPack RPM 生成器 wiki 资源,这些资源由于历史原因而不再维护,但可能仍然有用:
CPack RPM 生成器特定变量列表:
- CPACK_RPM_COMPONENT_INSTALL¶
为 CPack RPM 生成器启用组件打包
- 强制的:
不
- 默认:
关闭
如果启用(
ON)会生成多个包。默认情况下,会生成一个包含所有组件文件的包。
- CPACK_RPM_PACKAGE_SUMMARY¶
- CPACK_RPM_<component>_PACKAGE_SUMMARY¶
RPM 包摘要。
- 强制的:
是的
- 默认:
在 3.2 版本加入: 每个组件
CPACK_RPM_<component>_PACKAGE_SUMMARY变量。
- CPACK_RPM_PACKAGE_NAME¶
- CPACK_RPM_<component>_PACKAGE_NAME¶
RPM 包名称。
- 强制的:
是的
- 默认:
在 3.5 版本加入: 每个组件
CPACK_RPM_<component>_PACKAGE_NAME变量。
- CPACK_RPM_FILE_NAME¶
- CPACK_RPM_<component>_FILE_NAME¶
在 3.6 版本加入.
包文件名。
- 强制的:
是的
- 默认:
<CPACK_PACKAGE_FILE_NAME>[-<component>].rpm空格替换为“-”
这可以设置为
RPM-DEFAULT以允许rpmbuild工具自行生成包文件名。或者,提供的包文件名必须以.rpm后缀结尾。备注
通过使用用户提供的 spec 文件,可以从单个 spec 文件或多个 spec 文件(每个组件执行生成自己的规范文件)。在这种情况下,由于此变量设置或规范文件内容结构,可能会出现重复的文件名。重复的文件会被覆盖,打包程序将以防止此类错误的方式设置变量。
- CPACK_RPM_MAIN_COMPONENT¶
在 3.8 版本加入.
没有组件后缀的打包的主要组件。
- 强制的:
不
- 默认:
该变量可以设置为任意组件或组名,这样生成的组件或组rpm包在文件名和包名中不带组件后缀。
- CPACK_RPM_PACKAGE_EPOCH¶
在 3.10 版本加入.
RPM 包时代
- 强制的:
不
- 默认:
在更改版本控制模式或修复旧包版本号中的错误时应增加的可选数字。
- CPACK_RPM_PACKAGE_VERSION¶
RPM 包版本。
- 强制的:
是的
- 默认:
- CPACK_RPM_PACKAGE_ARCHITECTURE¶
- CPACK_RPM_<component>_PACKAGE_ARCHITECTURE¶
RPM 包架构。
- 强制的:
是的
- 默认:
uname -m输出的原生架构
如果你知道你正在构建一个
noarch包,这可能被设置为noarch。在 3.3 版本加入: 每个组件
CPACK_RPM_<component>_PACKAGE_ARCHITECTURE变量。
- CPACK_RPM_PACKAGE_RELEASE¶
RPM 包发布。
- 强制的:
是的
- 默认:
1个
这是 RPM 包本身的编号,即包装的版本而不是内容的版本(参见
CPACK_RPM_PACKAGE_VERSION)。如果以前的包装有问题和/或您想在此处放置一个奇特的 Linux 发行版特定编号,则可以更改默认值。
备注
这是进入 RPM Release: 字段的字符串。一些发行版(例如 Fedora、CentOS)需要 1%{?dist} 格式而不仅仅是一个数字。 %{?dist} 部分可以通过设置 CPACK_RPM_PACKAGE_RELEASE_DIST 添加。
- CPACK_RPM_PACKAGE_RELEASE_DIST¶
在 3.6 版本加入.
添加 RPM
Release:字段的 dist 标签。- 强制的:
不
- 默认:
关闭
这是报告的来自当前发行版的“%{dist}”标签,如果未设置 RPM 宏,则为空“%{dist}”。如果设置了此变量,则 RPM
Release:字段值设置为${CPACK_RPM_PACKAGE_RELEASE}%{?dist}。
- CPACK_RPM_PACKAGE_LICENSE¶
RPM 包许可策略。
- 强制的:
是的
- 默认:
“未知”
- CPACK_RPM_PACKAGE_GROUP¶
- CPACK_RPM_<component>_PACKAGE_GROUP¶
RPM 包组。
- 强制的:
是的
- 默认:
“未知”
在 3.5 版本加入: 每个组件
CPACK_RPM_<component>_PACKAGE_GROUP变量。
- CPACK_RPM_PACKAGE_VENDOR¶
RPM 包供应商。
- 强制的:
是的
- 默认:
CPACK_PACKAGE_VENDOR 如果设置或“未知”
- CPACK_RPM_PACKAGE_URL¶
- CPACK_RPM_<component>_PACKAGE_URL¶
项目 URL。
- 强制的:
不
- 默认:
在 3.12 版本加入:
CMAKE_PROJECT_HOMEPAGE_URL变量。
- CPACK_RPM_PACKAGE_DESCRIPTION¶
- CPACK_RPM_<component>_PACKAGE_DESCRIPTION¶
RPM 包说明。
- 强制的:
是的
- 默认:
:variable:`CPACK_COMPONENT_<compName>_DESCRIPTION`(仅基于组件的安装程序)如果设置,
CPACK_PACKAGE_DESCRIPTION_FILE如果设置,或者没有可用的包描述
在 3.2 版本加入: 每个组件
CPACK_RPM_<component>_PACKAGE_DESCRIPTION变量。
- CPACK_RPM_COMPRESSION_TYPE¶
RPM 压缩类型。
- 强制的:
不
- 默认:
(系统默认)
可用于覆盖用于构建 RPM 的 RPM 压缩类型。例如,一些 Linux 发行版现在默认使用
lzma或xz压缩,而旧版本不能使用这样的 RPM。使用这个可以强制使用压缩类型。可能的值是:
lzmaLempel–Ziv–Markov 链算法
xzXZ Utils 压缩
bzip2bzip2 Burrows–Wheeler 算法
gzipGNU Gzip 压缩
- CPACK_RPM_PACKAGE_AUTOREQ¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQ¶
RPM spec autoreq 字段。
- 强制的:
不
- 默认:
可用于启用(
1、yes)或禁用(0、no)自动共享库依赖性检测。依赖项被添加到需求列表中。备注
默认情况下,自动依赖检测由 rpm 生成器启用。
- CPACK_RPM_PACKAGE_AUTOPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOPROV¶
RPM 规范 autoprov 字段。
- 强制的:
不
- 默认:
可用于启用(
1、yes)或禁用(0、no)包提供的共享库的自动列表。共享库被添加到提供列表中。备注
默认情况下,rpm 生成器启用自动提供检测。
- CPACK_RPM_PACKAGE_AUTOREQPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQPROV¶
RPM 规范 autoreqprov 字段。
- 强制的:
不
- 默认:
变量同时启用/禁用 autoreq 和 autoprov。有关详细信息,请参阅
CPACK_RPM_PACKAGE_AUTOREQ和CPACK_RPM_PACKAGE_AUTOPROV。备注
默认情况下,自动检测功能由 rpm 启用。
- CPACK_RPM_PACKAGE_REQUIRES¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES¶
RPM 规范需要字段。
- 强制的:
不
- 默认:
可用于设置 RPM 依赖项(需要)。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8")
RPM 文件所需的软件包列表可以打印为:
rpm -qp --requires file.rpm
- CPACK_RPM_PACKAGE_CONFLICTS¶
- CPACK_RPM_<component>_PACKAGE_CONFLICTS¶
RPM 规范冲突字段。
- 强制的:
不
- 默认:
可用于设置负 RPM 依赖性(冲突)。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_CONFLICTS "libxml2")
RPM 文件的冲突包列表可以打印为:
rpm -qp --conflicts file.rpm
- CPACK_RPM_PACKAGE_REQUIRES_PRE¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_PRE¶
在 3.2 版本加入.
RPM 规范需要(预)字段。
- 强制的:
不
- 默认:
可用于设置 RPM 预安装依赖项 (requires(pre))。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POST¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POST¶
在 3.2 版本加入.
RPM 规范需要(发布)字段。
- 强制的:
不
- 默认:
可用于设置 RPM 安装后依赖项 (requires(post))。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POSTUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN¶
在 3.2 版本加入.
RPM 规范需要(postun)字段。
- 强制的:
不
- 默认:
可用于设置 RPM postuninstall 依赖项 (requires(postun))。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_PREUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN¶
在 3.2 版本加入.
RPM 规范需要(preun)字段。
- 强制的:
不
- 默认:
可用于设置 RPM 预卸载依赖项 (requires(preun))。请注意,您必须将完整的 requires 字符串括在引号之间,例如:
set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_SUGGESTS¶
- CPACK_RPM_<component>_PACKAGE_SUGGESTS¶
RPM 规范建议字段。
- 强制的:
不
- 默认:
可用于设置弱 RPM 依赖项(建议)。如果
rpmbuild不支持Suggests标签,CPack 将发出警告并忽略此变量。请注意,您必须将完整的 requires 字符串括在引号之间。
- CPACK_RPM_PACKAGE_PROVIDES¶
- CPACK_RPM_<component>_PACKAGE_PROVIDES¶
RPM 规范提供字段。
- 强制的:
不
- 默认:
可用于设置 RPM 依赖项(提供)。提供的 RPM 文件包列表可以打印为:
rpm -qp --provides file.rpm
- CPACK_RPM_PACKAGE_OBSOLETES¶
- CPACK_RPM_<component>_PACKAGE_OBSOLETES¶
RPM 规范废弃字段。
- 强制的:
不
- 默认:
可用于设置被该包废弃的 RPM 包。
- CPACK_RPM_PACKAGE_RELOCATABLE¶
构建可重定位的 RPM。
- 强制的:
不
- 默认:
CPACK_PACKAGE_RELOCATABLE
如果此变量设置为 TRUE 或 ON,CPack RPM 生成器将尝试构建可重定位的 RPM 包。可以使用以下方式安装可重定位的 RPM:
rpm --prefix or --relocate
要在其他地方安装它,请参阅 rpm(8)。请注意,如果 CPACK_SET_DESTDIR 设置为 ON,目前这可能会失败。如果设置了
CPACK_SET_DESTDIR那么您将收到一条警告消息,但如果安装了使用绝对路径的文件,您将获得意外行为。
- CPACK_RPM_SPEC_INSTALL_POST¶
自 2.8.12 版本弃用: 请改用
CPACK_RPM_SPEC_MORE_DEFINE。- 强制的:
不
- 默认:
可用于覆盖生成的规范文件中的
__spec_install_post部分。这会影响包创建期间的安装步骤,而不是包安装期间的安装步骤。要在包安装期间添加要执行的操作,请改用CPACK_RPM_POST_INSTALL_SCRIPT_FILE。
- CPACK_RPM_SPEC_MORE_DEFINE¶
RPM 扩展规范定义行。
- 强制的:
不
- 默认:
可用于将任何
%define行添加到生成的规范文件中。它的一个使用示例是防止剥离可执行文件(但请注意,这也可能会禁用其他默认的安装后处理):set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true")
- CPACK_RPM_PACKAGE_DEBUG¶
切换 CPack RPM 生成器调试输出。
- 强制的:
不
- 默认:
可以在调用 cpack 时设置,以便在 CPack RPM 运行期间跟踪调试信息。例如,您可以像这样启动 CPack:
cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM
- CPACK_RPM_USER_BINARY_SPECFILE¶
- CPACK_RPM_<componentName>_USER_BINARY_SPECFILE¶
用户提供的规范文件。
- 强制的:
不
- 默认:
可以由用户设置,以指定 CPack RPM 生成器使用的 USER 二进制规范文件,而不是生成文件。指定的文件将由 configure_file(@ONLY) 处理。
- CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE¶
规范文件模板。
- 强制的:
不
- 默认:
如果设置 CPack 将为 USER 指定的二进制规范文件生成模板并因错误而停止。例如像这样启动 CPack:
cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM
然后用户可以使用此文件来手工制作自己的二进制规范文件,该文件可以与
CPACK_RPM_USER_BINARY_SPECFILE一起使用。
- CPACK_RPM_PRE_INSTALL_SCRIPT_FILE¶
- CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE¶
- CPACK_RPM_PRE_TRANS_SCRIPT_FILE¶
包含预安装/卸载/事务脚本的文件路径。
- 强制的:
不
- 默认:
可用于在规范文件中嵌入预安装/卸载/事务脚本。引用的脚本文件(或两者)将被读取并直接放在
%pre或%preun部分之后组件可以被CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE,CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE和CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE覆盖被包含在rpm -qp --scripts package.rpm
在 3.18 版本加入:
CPACK_RPM_PRE_TRANS_SCRIPT_FILE变量。
- CPACK_RPM_POST_INSTALL_SCRIPT_FILE¶
- CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE¶
- CPACK_RPM_POST_TRANS_SCRIPT_FILE¶
包含安装后/卸载/事务脚本的文件路径。
- 强制的:
不
- 默认:
可用于在规范文件中嵌入安装后/卸载/事务脚本。引用的脚本文件(或两者)将被读取并直接放在
%post或%postun部分之后。如果CPACK_RPM_COMPONENT_INSTALL设置为 ON,则每个组件的安装/卸载/事务脚本可以被CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE、CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE和CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE可以验证哪个 scriptlet 已包含在rpm -qp --scripts package.rpm
在 3.18 版本加入:
CPACK_RPM_POST_TRANS_SCRIPT_FILE变量。
- CPACK_RPM_USER_FILELIST¶
- CPACK_RPM_<COMPONENT>_USER_FILELIST¶
- 强制的:
不
- 默认:
可用于在规范文件中明确指定
%(<directive>)文件行。像%config(noreplace)或在%files部分中找到的任何其他指令。由于 CPack RPM 生成器正在生成文件(和目录)列表,用户指定的CPACK_RPM_<COMPONENT>_USER_FILELIST列表的文件将从生成的列表中删除。如果引用目录,请不要添加尾部斜杠。在 3.8 版本加入: 每行可以有多个指令,如“%attr(600,root,root) %config(noreplace)”。
- CPACK_RPM_CHANGELOG_FILE¶
RPM 更新日志文件。
- 强制的:
不
- 默认:
可用于在规范文件中嵌入变更日志。引用的文件将被读取并直接放在
%changelog部分之后。
- CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST¶
要排除的路径列表。
- 强制的:
不
- 默认:
- 默认排除以下路径:
/等等/etc/init.d/usr/usr/bin/usr/include/usr/lib/usr/libx32/usr/lib64/usr/共享/usr/share/aclocal/usr/share/doc
可用于从 CPack RPM 发现的自动生成的路径列表中排除路径(目录或文件)。如果用户未定义变量,则默认值包含一组合理的值。如果变量由用户定义,则 CPack RPM 生成器将不会使用任何默认路径。如果您想向默认列表添加一些路径,则可以使用 CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION 变量。
在 3.10 版本加入: 将
/usr/share/aclocal添加到默认的排除列表中。
- CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION¶
要排除的附加路径列表。
- 强制的:
不
- 默认:
可用于从初始默认排除路径列表中添加更多排除路径(目录或文件)。请参阅
CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST。
- CPACK_RPM_RELOCATION_PATHS¶
在 3.2 版本加入.
包重定位路径列表。
- 强制的:
不
- 默认:
可用于为每个可重定位 RPM 指定多个重定位路径。变量包含重定位路径列表,如果相对路径以
CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX的值作为前缀,或者如果未提供组件版本,则以CPACK_PACKAGING_INSTALL_PREFIX的值作为前缀。变量不是基于组件的,因为它的内容可用于设置不同的路径前缀,例如二进制目录和文档目录在同一时间。仅将特定组件所需的前缀添加到该组件 - 组件必须包含至少一个文件/目录/符号链接,并带有CPACK_RPM_RELOCATION_PATHS前缀以添加特定的重定位路径。如果在任何提供的前缀位置上没有文件/目录/符号链接,包将不包含任何重定位路径。不包含任何重定位路径或包含位于重定位路径之外的文件/目录/符号链接的包会打印出一个AUTHOR_WARNING,RPM 将是部分可重定位的。
- CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX¶
在 3.2 版本加入.
每个组件重定位路径安装前缀。
- 强制的:
不
- 默认:
可用于为可重定位 RPM 包的每个组件设置 CPACK_PACKAGING_INSTALL_PREFIX。
- CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION¶
- CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION¶
在 3.3 版本加入.
从重定位路径列表中删除默认安装前缀。
- 强制的:
不
- 默认:
CPACK_PACKAGING_INSTALL_PREFIX或CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX被视为重定位路径之一
可用于从可重定位的 RPM 前缀路径中删除
CPACK_PACKAGING_INSTALL_PREFIX和CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX。
- CPACK_RPM_ADDITIONAL_MAN_DIRS¶
在 3.3 版本加入.
- 强制的:
不
- 默认:
- 默认添加的正则表达式取自
brp-compressRPM 宏: /usr/man/man.*/usr/man/.*/man.*/usr/info.*/usr/share/man/man.*/usr/share/man/.*/man.*/usr/share/info.*/usr/kerberos/man.*/usr/X11R6/man/man.*/usr/lib/perl5/man/man.*/usr/share/doc/.*/man/man.*/usr/lib/.*/man/man.*
- 默认添加的正则表达式取自
可用于设置额外的 man 目录,这些目录可能被 brp-compress RPM 宏压缩。变量内容必须是指向包含 man 文件的目录或直接指向 man 文件的正则表达式列表。请注意,为了压缩手册页,brp-compress RPM 脚本中还必须存在一个路径,并且操作系统必须将 brp-compress 脚本添加到 RPM 配置中。
- CPACK_RPM_DEFAULT_USER¶
- CPACK_RPM_<compName>_DEFAULT_USER¶
在 3.6 版本加入.
RPM 内容的默认用户所有权
- 强制的:
不
- 默认:
根
值应该是用户名而不是 UID。请注意,
<compName>必须大写。
- CPACK_RPM_DEFAULT_GROUP¶
- CPACK_RPM_<compName>_DEFAULT_GROUP¶
在 3.6 版本加入.
RPM 内容的默认组所有权
- 强制的:
不
- 默认:
根
值应该是组名而不是 GID。请注意,
<compName>必须大写。
- CPACK_RPM_DEFAULT_FILE_PERMISSIONS¶
- CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS¶
在 3.6 版本加入.
用于打包文件的默认权限
- 强制的:
不
- 默认:
(系统默认)
接受的值是具有 PERMISSIONS 的列表。有效权限是:
OWNER_READOWNER_WRITEOWNER_EXECUTEGROUP_READGROUP_WRITEGROUP_EXECUTE世界阅读WORLD_WRITE世界执行
请注意,
<compName>必须大写。
- CPACK_RPM_DEFAULT_DIR_PERMISSIONS¶
- CPACK_RPM_<compName>_DEFAULT_DIR_PERMISSIONS¶
在 3.6 版本加入.
用于打包目录的默认权限
- 强制的:
不
- 默认:
(系统默认)
接受的值是具有 PERMISSIONS 的列表。有效权限与 CPACK_RPM_DEFAULT_FILE_PERMISSIONS 相同。请注意,
<compName>必须大写。
- CPACK_RPM_INSTALL_WITH_EXEC¶
在 3.11 版本加入.
强制执行程序和共享库的权限
- 强制的:
不
- 默认:
(系统默认)
强制设置所有者、组和世界对程序和共享库的执行权限。这可用于在共享库未设置执行权限的系统(例如 Debian)上创建有效的 rpm 包。
备注
在将调试符号与调试信息包的二进制文件分开时,将忽略没有执行权限的程序和共享库。
符号链接的打包¶
在 3.3 版本加入.
CPack RPM 生成器支持符号链接的打包:
execute_process(COMMAND ${CMAKE_COMMAND}
-E create_symlink <relative_path_location> <symlink_name>)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<symlink_name>
DESTINATION <symlink_location> COMPONENT libraries)
符号链接将在添加到包之前进行优化(如果可能,路径将被缩短),或者如果检测到多个重定位路径,将生成安装后符号链接重定位脚本。
符号链接可能指向未由同一包打包的位置(不同的组件或什至根本未打包),但这些位置将被视为包的一部分,同时确定是否应创建符号链接或出现在安装后脚本中 - 取决于重定位路径。
在 3.6 版本发生变更: 指向打包路径外部位置的符号链接会产生警告,并被视为不可重定位的永久符号链接。在这种情况下,以前版本的 CMake 会产生错误。
目前有一些限制:
对于基于组件的打包,在处理符号链接时不检查组件相互依赖性。指向不同组件内容的符号链接的处理方式与指向不会打包的位置的方式相同。
通过一个或多个中间符号链接指向某个位置的符号链接将不会被不同地处理 - 如果中间符号链接也在可重定位路径上,则在包安装期间重定位它可能会导致初始符号链接指向无效位置.
调试信息的打包¶
在 3.7 版本加入.
Debuginfo 包包含用于调试打包的二进制文件的调试符号和源代码。
Debuginfo RPM 打包有它自己的一组变量:
- CPACK_RPM_DEBUGINFO_PACKAGE¶
- CPACK_RPM_<component>_DEBUGINFO_PACKAGE¶
启用 debuginfo RPM 包的生成。
- 强制的:
不
- 默认:
关闭
备注
二进制文件在打包之前必须包含调试符号,因此使用 Debug 或 RelWithDebInfo 作为 CMAKE_BUILD_TYPE 变量值。
此外,如果设置了 CPACK_STRIP_FILES,文件将在到达 RPM 生成器之前被剥离,因此不会包含调试符号,并且不会构建 debuginfo 包。不要与 CPACK_STRIP_FILES 一起使用。
备注
从没有二进制文件、有二进制文件但没有执行权限或没有调试符号的包生成的包将导致打包终止。
- CPACK_BUILD_SOURCE_DIRS¶
提供构建二进制文件的源文件的根目录位置。
- 强制的:
是,如果设置了
CPACK_RPM_DEBUGINFO_PACKAGE- 默认:
备注
对于 CMake 项目 CPACK_BUILD_SOURCE_DIRS 默认设置为指向 CMAKE_SOURCE_DIR 和 CMAKE_BINARY_DIR 路径。
备注
路径前缀不属于 CPACK_BUILD_SOURCE_DIRS 提供的任何位置的源将不会出现在 debuginfo 包中。
- CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX¶
- CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX¶
在包安装期间放置源的位置的前缀。
- 强制的:
是,如果设置了
CPACK_RPM_DEBUGINFO_PACKAGE- 默认:
/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}和组件打包``/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}-<component>``
备注
每个源路径前缀都附加了 src_<index> 后缀,其中 index 是从 CPACK_BUILD_SOURCE_DIRS 变量使用的路径的索引。这会产生 ${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_<index> 替换路径。限制是被替换的路径部分必须比其替换的长度更短或相等。如果不是这种情况,CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX 变量必须设置为较短的路径,或者源目录必须放在较长的路径上。
- CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS¶
包含应从调试信息包中排除的源的目录。
- 强制的:
不
- 默认:
- 默认排除以下路径:
/usr/usr/src/usr/src/调试
列出的路径由其他 RPM 包拥有,因此不应在 debuginfo 包卸载时删除。
- CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION¶
应附加到 CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS 以进行排除的路径。
- 强制的:
不
- 默认:
- CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE¶
在 3.8 版本加入.
即使设置了组件打包,也创建单个 debuginfo 包。
- 强制的:
不
- 默认:
关闭
启用此变量后,即使启用了组件打包,它也会生成单个 debuginfo 包。
将此功能与组件打包结合使用时,并且存在多个组件时,此变量需要设置
CPACK_RPM_MAIN_COMPONENT。
备注
如果没有设置 CPACK_RPM_<component>_DEBUGINFO_PACKAGE 变量,那么 CPACK_RPM_DEBUGINFO_PACKAGE 会在 CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE 设置时自动设置为 ON。
- CPACK_RPM_DEBUGINFO_FILE_NAME¶
- CPACK_RPM_<component>_DEBUGINFO_FILE_NAME¶
在 3.9 版本加入.
调试信息包文件名。
- 强制的:
不
- 默认:
rpmbuild 工具生成的包文件名
或者,提供的 debuginfo 包文件名必须以
.rpm后缀结尾,并且应该与其他生成的包的文件名不同。变量可能包含“@cpack_component@”占位符,如果启用组件打包,它将被组件名称替换,否则它会删除占位符。
将变量设置为“RPM-DEFAULT”可用于将文件名生成显式设置为默认值。
备注
CPACK_RPM_FILE_NAME 还支持 rpmbuild 工具生成的包文件名 - 默认情况下禁用,但可以通过将变量设置为 RPM-DEFAULT 来启用。
资源打包 (SRPM)¶
在 3.7 版本加入.
通过设置 CPACK_RPM_PACKAGE_SOURCES 变量启用 SRPM 打包,同时通常使用 CPACK_INSTALLED_DIRECTORIES 变量提供包含 CMakeLists.txt 和源文件的目录。
对于 CMake 项目,SRPM 包将通过执行来生成:
cpack -G RPM --config ./CPackSourceConfig.cmake
备注
生成的 SRPM 包预计将使用 cmake(1) 可执行文件构建并与 cpack(1) 可执行文件打包,因此 CMakeLists.txt 必须位于根源目录中并且必须能够生成通过执行 cpack -G 命令来生成二进制 rpm 包。当从生成的 SRPM 包生成二进制 rpm 包时,这两个可执行文件以及 rpmbuild 也必须存在。
一旦生成了 SRPM 包,就可以通过创建用于 rpm 生成的目录结构和执行 rpmbuild 工具来生成二进制包:
mkdir -p build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
rpmbuild --define "_topdir <path_to_build_dir>" --rebuild <SRPM_file_name>
生成的包将位于 build_dir/RPMS 目录或其子目录中。
备注
SRPM 包在内部使用 CPack/RPM 生成器生成二进制包,因此 CMakeScripts.txt 可以在 SRPM 到二进制 rpm 生成步骤中决定包应该包含哪些内容以及它们应该如何打包(整体或组件)。 CMake 可以决定这个,例如通过在开始生成二进制 rpm 包的过程之前读取包管理器设置的环境变量。这样,根据平台的打包规则,可以使用单个 SRPM 包在不同平台上生成不同的二进制 rpm 包。
源 RPM 打包有它自己的一组变量:
- CPACK_RPM_PACKAGE_SOURCES¶
内容是否应打包为源 rpm(默认为二进制 rpm)。
- 强制的:
不
- 默认:
关闭
备注
对于 cmake 项目 CPACK_RPM_PACKAGE_SOURCES 变量在 CPackConfig.cmake 中设置为``OFF``,在 CPackSourceConfig.cmake 生成的文件中设置为``ON``。
- CPACK_RPM_SOURCE_PKG_BUILD_PARAMS¶
提供给 cmake(1) 可执行文件的附加命令行参数。
- 强制的:
不
- 默认:
- CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX¶
将在 CPACK_PACKAGING_INSTALL_PREFIX 变量中提供的打包安装前缀,用于生成二进制 RPM 包。
- 强制的:
是的
- 默认:
/
- CPACK_RPM_BUILDREQUIRES¶
源 rpm 构建依赖项列表。
- 强制的:
不
- 默认:
可用于设置源 RPM 构建依赖项 (BuildRequires)。请注意,您必须将完整的构建要求字符串括在引号之间,例如:
set(CPACK_RPM_BUILDREQUIRES "python >= 2.5.0, cmake >= 2.8")
- CPACK_RPM_REQUIRES_EXCLUDE_FROM¶
在 3.22 版本加入.
- 强制的:
不
- 默认:
可用于防止依赖项生成器扫描特定文件或目录以查找依赖项。请注意,您可以使用匹配所有目录或文件的正则表达式,例如:
set(CPACK_RPM_REQUIRES_EXCLUDE_FROM "bin/libqsqloci.*\\.so.*")