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> 指的是 **大写表示的组名**。它可以是组件名或组件组名。通常,这些变量对应于 RPM 规格文件实体。您可以在此处找到有关规格文件的信息 https://rpm.org/documentation。
版本 3.6 中已更改: 变量的 <COMPONENT> 部分首选使用大写(例如,如果组件名为 foo,则使用 CPACK_RPM_FOO_XXXX 变量名格式),与其他 CPACK_<COMPONENT>_XXXX 变量一样。为了向后兼容(CMake/CPack 版本 3.5 及更低版本),对于 CMake/CPack 旧版本中定义的变量,仍然支持相同大小写的组件(例如 fOo 将被用作 CPACK_RPM_fOo_XXXX),但对于将来添加的变量不保证。为了向后兼容,当两者都存在时,相同大小写的组件变量会覆盖大写版本。
以下是一些 CPack RPM 生成器 wiki 资源,出于历史原因在此列出,不再维护,但可能仍有用
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#rpm-unix-only
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]使用给定的文件名。
版本 3.29 中已更改: 如果缺少
.rpm后缀,它将被自动添加。以前后缀是必需的。
注意
通过使用用户提供的规格文件,rpm 宏扩展(例如用于生成
debuginfo包)或简单地使用多个组件,可以从单个规格文件或多个规格文件(每个组件的执行都会生成自己的规格文件)生成多个 rpm 文件。在这种情况下,重复的文件名可能是此变量设置或规格文件内容结构的结果。重复的文件会被覆盖,打包者有责任以防止此类错误的方式设置变量。
- CPACK_RPM_MAIN_COMPONENT¶
版本 3.8 新增。
主组件,在打包时没有组件后缀。
- 强制项:
否
- 默认值:
此变量可以设置为任何组件或组名,以便生成的组件或组 rpm 包在文件名和包名中没有组件后缀。
- CPACK_RPM_PACKAGE_EPOCH¶
3.10 版本新增。
RPM 包的 epoch。
- 强制项:
否
- 默认值:
可选数字,在更改版本方案或修复旧包版本号中的错误时应增加。
- 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} 格式,而不仅仅是一个数字。可以通过设置 CPACK_RPM_PACKAGE_RELEASE_DIST 添加 %{?dist} 部分。
- CPACK_RPM_PACKAGE_RELEASE_DIST¶
3.6 版本新增。
添加到 RPM
Release:字段的 dist 标签。- 强制项:
否
- 默认值:
关闭
这是当前发行版报告的
%{dist}标签,或者如果 RPM 宏未设置,则为空%{dist}。如果设置了此变量,则 RPMRelease:字段的值将设置为${CPACK_RPM_PACKAGE_RELEASE}%{?dist}。
- CPACK_RPM_PACKAGE_LICENSE¶
RPM 包许可证策略。
- 强制项:
是
- 默认值:
"unknown"
- CPACK_RPM_PACKAGE_GROUP¶
- CPACK_RPM_<component>_PACKAGE_GROUP¶
RPM 包组。
- 强制项:
是
- 默认值:
"unknown"
版本 3.5 中已添加: 每个组件的
CPACK_RPM_<component>_PACKAGE_GROUP变量。
- CPACK_RPM_PACKAGE_VENDOR¶
RPM 包供应商。
- 强制项:
是
- 默认值:
如果设置了 CPACK_PACKAGE_VENDOR,则为 CPACK_PACKAGE_VENDOR,否则为“unknown”。
- 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 包描述。
- 强制项:
是
- 默认值:
CPACK_COMPONENT_<compName>_DESCRIPTION(仅限基于组件的安装程序)如果设置了,CPACK_PACKAGE_DESCRIPTION_FILE如果设置了,或者无 可用 包 描述
版本 3.2 中已添加: 每个组件的
CPACK_RPM_<component>_PACKAGE_DESCRIPTION变量。
- CPACK_RPM_COMPRESSION_TYPE¶
RPM 压缩类型。
- 强制项:
否
- 默认值:
(系统默认)
可用于覆盖用于构建 RPM 的 RPM 压缩类型。例如,某些 Linux 发行版默认使用
xz或zstd。使用此变量,可以指定要使用的特定压缩类型。可能的值为
lzmaLempel–Ziv–Markov chain algorithm
xzXZ Utils 压缩
bzip2bzip2 Burrows–Wheeler algorithm
gzipGNU Gzip 压缩
zstd在版本 3.31 中添加。
Zstandard compression
- CPACK_RPM_PACKAGE_AUTOREQ¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQ¶
RPM 规格 autoreq 字段。
- 强制项:
否
- 默认值:
可用于启用(
1,yes)或禁用(0,no)共享库依赖项的自动检测。依赖项将被添加到 requires 列表。注意
默认情况下,RPM 生成器启用自动依赖项检测。
- CPACK_RPM_PACKAGE_AUTOPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOPROV¶
RPM 规格 autoprov 字段。
- 强制项:
否
- 默认值:
可用于启用(
1,yes)或禁用(0,no)自动列出包提供的共享库。共享库将被添加到 provides 列表。注意
默认情况下,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 规格 requires 字段。
- 强制项:
否
- 默认值:
可用于设置 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 规格 conflicts 字段。
- 强制项:
否
- 默认值:
可用于设置负面 RPM 依赖项 (conflicts)。请注意,在设置此变量时,您必须将整个值用引号括起来,例如
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 规格 requires(pre) 字段。
- 强制项:
否
- 默认值:
可用于设置 RPM 预安装依赖项 (requires(pre))。请注意,在设置此变量时,您必须将整个值用引号括起来,例如
set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POST¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POST¶
版本 3.2 中新增。
RPM 规格 requires(post) 字段。
- 强制项:
否
- 默认值:
可用于设置 RPM 后安装依赖项 (requires(post))。请注意,在设置此变量时,您必须将整个值用引号括起来,例如
set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POSTUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN¶
版本 3.2 中新增。
RPM 规格 requires(postun) 字段。
- 强制项:
否
- 默认值:
可用于设置 RPM 卸载后依赖项 (requires(postun))。请注意,在设置此变量时,您必须将整个值用引号括起来,例如
set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_PREUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN¶
版本 3.2 中新增。
RPM 规格 requires(preun) 字段。
- 强制项:
否
- 默认值:
可用于设置 RPM 卸载前依赖项 (requires(preun))。请注意,在设置此变量时,您必须将整个值用引号括起来,例如
set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_SUGGESTS¶
- CPACK_RPM_<component>_PACKAGE_SUGGESTS¶
RPM 规格 suggests 字段。
- 强制项:
否
- 默认值:
可用于设置弱 RPM 依赖项 (suggests)。如果
rpmbuild不支持Suggests标签,CPack 将发出警告并忽略此变量。请注意,在设置此变量时,您必须将整个值用引号括起来。
- CPACK_RPM_PACKAGE_RECOMMENDS¶
- CPACK_RPM_<component>_PACKAGE_RECOMMENDS¶
在 4.1 版本中新增。
RPM 规格 recommends 字段。
- 强制项:
否
- 默认值:
可用于设置弱 RPM 依赖项 (recommends)。如果
rpmbuild不支持Recommends标签,CPack 将发出警告并忽略此变量。请注意,在设置此变量时,您必须将整个值用引号括起来。
- CPACK_RPM_PACKAGE_SUPPLEMENTS¶
- CPACK_RPM_<component>_PACKAGE_SUPPLEMENTS¶
在 4.1 版本中新增。
RPM 规格 supplements 字段。
- 强制项:
否
- 默认值:
可用于设置弱 RPM 依赖项 (supplements)。如果
rpmbuild不支持Supplements标签,CPack 将发出警告并忽略此变量。请注意,在设置此变量时,您必须将整个值用引号括起来。
- CPACK_RPM_PACKAGE_ENHANCES¶
- CPACK_RPM_<component>_PACKAGE_ENHANCES¶
在 4.1 版本中新增。
RPM 规格 enhances 字段。
- 强制项:
否
- 默认值:
可用于设置弱 RPM 依赖项 (enhances)。如果
rpmbuild不支持Enhances标签,CPack 将发出警告并忽略此变量。请注意,在设置此变量时,您必须将整个值用引号括起来。
- CPACK_RPM_PACKAGE_PROVIDES¶
- CPACK_RPM_<component>_PACKAGE_PROVIDES¶
RPM 规格 provides 字段。
- 强制项:
否
- 默认值:
可用于设置 RPM 依赖项 (provides)。RPM 文件的提供包列表可以使用以下命令打印:
rpm -qp --provides file.rpm
- CPACK_RPM_PACKAGE_OBSOLETES¶
- CPACK_RPM_<component>_PACKAGE_OBSOLETES¶
RPM 规格 obsoletes 字段。
- 强制项:
否
- 默认值:
可用于设置此包所废弃的 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 生成器使用,而不是生成该文件。指定的文件将通过 configure_file(@ONLY) 进行处理。
- CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE¶
规格文件模板。
- 强制项:
否
- 默认值:
如果设置了此变量,CPack 将生成一个用户指定二进制规格文件的模板,然后停止并报错。例如,启动 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_INSTALL设置为 ON,则每个组件的安装/卸载/事务脚本可以通过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进行覆盖。您可以使用以下命令来验证包含的脚本: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/etc/init.d/usr/usr/bin/usr/include/usr/lib/usr/libx32/usr/lib64/usr/share/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.*
- 默认添加的正则表达式取自
可用于设置可能被 brp-compress RPM 宏压缩的其他 man 目录。变量内容必须是正则表达式列表,指向包含 man 文件的目录或直接指向 man 文件。请注意,为了压缩 man 页,路径还必须存在于 brp-compress RPM 脚本中,并且 brp-compress 脚本必须由操作系统添加到 RPM 配置中。
- CPACK_RPM_DEFAULT_USER¶
- CPACK_RPM_<compName>_DEFAULT_USER¶
3.6 版本新增。
RPM 内容的默认用户所有权。
- 强制项:
否
- 默认值:
root
值应为用户名而非 UID。请注意,
<compName>必须为大写。
- CPACK_RPM_DEFAULT_GROUP¶
- CPACK_RPM_<compName>_DEFAULT_GROUP¶
3.6 版本新增。
RPM 内容的默认组所有权。
- 强制项:
否
- 默认值:
root
值应为组名而非 GID。请注意,
<compName>必须为大写。
- CPACK_RPM_DEFAULT_FILE_PERMISSIONS¶
- CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS¶
3.6 版本新增。
打包文件的默认权限。
- 强制项:
否
- 默认值:
(系统默认)
可接受的值是带有 PERMISSIONS 的列表。有效的权限是:
OWNER_READOWNER_WRITEOWNER_EXECUTEGROUP_READGROUP_WRITEGROUP_EXECUTEWORLD_READWORLD_WRITEWORLD_EXECUTE
请注意,
<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 包,因为在这些系统上共享库没有设置执行权限。
注意
没有执行权限的程序和共享库在从二进制文件分离调试符号以用于 debuginfo 包时会被忽略。
打包符号链接¶
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 包的生成。
- 强制项:
否
- 默认值:
关闭
注意
在打包之前,二进制文件必须包含调试符号,因此请为 CMAKE_BUILD_TYPE 变量值使用 Debug 或 RelWithDebInfo。
此外,如果设置了 CPACK_STRIP_FILES,文件将在被发送到 RPM 生成器之前被剥离,因此将不包含调试符号,也不会构建 debuginfo 包。请不要与 CPACK_STRIP_FILES 一起使用。
注意
由不包含二进制文件、包含二进制文件但没有执行权限或没有调试符号的包生成的包将导致打包终止。
- CPACK_BUILD_SOURCE_DIRS¶
提供二进制文件构建所依据的源文件根目录的位置。
- 强制项:
如果
CPACK_RPM_DEBUGINFO_PACKAGE被设置,则为 True。- 默认值:
注意
对于 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被设置,则为 True。- 默认值:
/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¶
包含应从 debuginfo 包中排除的源文件的目录。
- 强制项:
否
- 默认值:
- 默认排除以下路径:
/usr/usr/src/usr/src/debug
列出的路径属于其他 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_SINGLE_PACKAGE 设置为 ON 时,CPACK_RPM_DEBUGINFO_PACKAGE 会自动设置为 ON。
- CPACK_RPM_DEBUGINFO_FILE_NAME¶
- CPACK_RPM_<component>_DEBUGINFO_FILE_NAME¶
版本 3.9 中添加。
Debuginfo 包文件名。
- 强制项:
否
- 默认值:
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 包,具体取决于平台的打包规则。
Source RPM 打包有其自己的一组变量。
- CPACK_RPM_PACKAGE_SOURCES¶
内容是否应打包为源 rpm(默认为二进制 rpm)。
- 强制项:
否
- 默认值:
关闭
注意
对于 CMake 项目,CPACK_RPM_PACKAGE_SOURCES 变量在 CPackConfig.cmake 中设置为 OFF,在 CPackSourceConfig.cmake 生成的文件中设置为 ON。
- CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX¶
用于生成二进制 RPM 包的
CPACK_PACKAGING_INSTALL_PREFIX变量中提供的打包安装前缀。- 强制项:
是
- 默认值:
/
- 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.*")