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
变量一样。出于向后兼容的目的(3.5 及以下版本的 CMake/CPack),对于在旧版 CMake/CPack 中定义的变量,仍支持相同大小写的组件(例如 fOo
将用作 CPACK_RPM_fOo_XXXX
),但对于未来添加的变量,不保证支持。出于向后兼容的目的,相同大小写的组件变量还会覆盖同时存在的大写形式变量。
以下是一些 CPack RPM 生成器 Wiki 资源,它们出于历史原因而保留,不再维护,但仍可能有用
CPack RPM 生成器特定变量的列表
- CPACK_RPM_COMPONENT_INSTALL¶
为 CPack RPM 生成器启用组件打包
- 必需的:
否
- 默认:
OFF
如果启用(
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
自动生成软件包文件名称。<file-name>[.rpm]
使用给定的文件名称。
在版本 3.29 中更改: 如果
.rpm
后缀不存在,系统将自动将其添加。以前必须使用该后缀。
注意
通过使用用户提供的规格文件,rpm 宏扩展(如用于生成
debuginfo
软件包,或通过简单地使用多个组件),可能会生成多个 rpm 文件,无论是从单个规格文件生成,还是从多个规格文件生成(每个组件执行都会生成其自己的规格文件)。在这种情况下,可能会因为此变量设置或规格文件内容结构而重复文件名。重复的文件将被覆盖,由封装器设置变量,以防止出现此类错误。
- 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}
格式,而不仅仅是数字。可以通过设置 CPACK_RPM_PACKAGE_RELEASE_DIST
来添加 %{?dist}
部分。
- CPACK_RPM_PACKAGE_RELEASE_DIST¶
在版本 3.6 中添加。
添加到 RPM
Release:
字段的 dist 标记。- 必需的:
否
- 默认:
OFF
这是从当前发行版报告的
%{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,则为 "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
(仅基于组件的安装程序)如果设置,无 软件包 说明 可用
版本 3.2 中添加: 针对每个组件的
CPACK_RPM_<component>_PACKAGE_DESCRIPTION
变量。
- CPACK_RPM_COMPRESSION_TYPE¶
RPM 压缩类型。
- 必需的:
否
- 默认:
(系统默认)
可用于覆盖要用于构建 RPM 的 RPM 压缩类型。例如,某些 Linux 发行版默认设置为
xz
或zstd
。使用此方法,可指定要使用的特定压缩类型。可能的值为
lzma
Lempel–Ziv–Markov 链算法
xz
XZ Utils 压缩
bzip2
bzip2 Burrows–Wheeler 算法
gzip
GNU Gzip 压缩
zstd
版本 3.31 中添加。
Zstandard 压缩
- CPACK_RPM_PACKAGE_AUTOREQ¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQ¶
RPM spec 自动请求字段。
- 必需的:
否
- 默认:
可用于启用 (
1
,yes
) 或禁用 (0
,no
) 自动共享库依赖项检测。依赖项将添加到 requires 列表中。注意
默认情况下,rpm 生成器将启用自动依赖项检测。
- CPACK_RPM_PACKAGE_AUTOPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOPROV¶
RPM spec 自动提供字段。
- 必需的:
否
- 默认:
可用于启用 (
1
,yes
) 或禁用 (0
,no
) 自动列出软件包提供的共享库。共享库将添加到 provides 列表中。注意
默认情况下,rpm 生成器将启用自动 provides 检测。
- CPACK_RPM_PACKAGE_AUTOREQPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQPROV¶
rpm spec 的 autoreqprov 字段。
- 必需的:
否
- 默认:
此变量同时启用/禁用 autoreq 和 autoprov。有关更多详情,请参阅
CPACK_RPM_PACKAGE_AUTOREQ
和CPACK_RPM_PACKAGE_AUTOPROV
。注意
默认情况下,rpm 启用自动检测功能。
- CPACK_RPM_PACKAGE_REQUIRES¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES¶
rpm spec 的 requires 字段。
- 必需的:
否
- 默认:
可以用来设置 rpm 的依赖项 (requires)。请注意,你必须用引号将完整的 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 spec 的 conflicts 字段。
- 必需的:
否
- 默认:
可以用来设置 rpm 的负依赖项 (conflicts)。请注意,你必须用引号将完整的 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 spec 的 requires(pre) 字段。
- 必需的:
否
- 默认:
可以用来设置 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 spec 的 requires(post) 字段。
- 必需的:
否
- 默认:
可以用来设置 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 spec 的 requires(postun) 字段。
- 必需的:
否
- 默认:
可以用来设置 rpm 的后卸载依赖项 (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 规范 requires(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¶
包含预安装/卸载/事务脚本的文件路径。
- 必需的:
否
- 默认:
可用于在 spec 文件中嵌入一个预先安装/卸载/事务脚本。将会读取所选脚本文件(或两者)并将其直接放置在
%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 安装/卸载/事务脚本的文件路径。
- 必需的:
否
- 默认:
可用于在 spec 文件中嵌入一个 post 安装/卸载/事务脚本。将会读取所选脚本文件(或两者)并将其直接放置在
%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¶
- 必需的:
否
- 默认:
可用于在 spec 文件中明确指定
%(<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。所引用的文件将被读取并直接放在
%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-compress
RPM 宏 /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 文件的正则表达式列表。请注意为了压缩手册页,路径还必须存在于 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_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
GROUP_WRITE
GROUP_EXECUTE
WORLD_READ
WORLD_WRITE
WORLD_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 包。
注意
在分离调试符号以用于调试信息包的二进制文件期间,忽略不具有执行权限的程序和共享库。
符号链接的打包¶
在 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 版中添加。
调试信息包包含调试符号和打包二进制文件的调试来源。
调试信息 RPM 打包有一组自己的变量
- CPACK_RPM_DEBUGINFO_PACKAGE¶
- CPACK_RPM_<component>_DEBUGINFO_PACKAGE¶
启用调试信息 RPM 包的生成。
- 必需的:
否
- 默认:
OFF
注意
二进制文件在打包前必须包含调试符号,因此用于 CMAKE_BUILD_TYPE
变量值,请使用 Debug
或 RelWithDebInfo
。
此外,如果设置了 CPACK_STRIP_FILES
,文件将在到达 RPM 生成器前被剥离,因此不会包含调试符号,并且不会构建调试信息包。请勿与 CPACK_STRIP_FILES
一起使用。
注意
从不带二进制文件、带二进制文件但不带执行权限或不带调试符号的包中生成包,将导致打包终止。
- CPACK_BUILD_SOURCE_DRS¶
提供生成二进制文件的源文件根目录的位置。
- 必需的:
- 默认:
注意
对于 CMake 项目,CPACK_BUILD_SOURCE_DIRS
默认设置为指向CMAKE_SOURCE_DIR
和CMAKE_BINARY_DIR
路径。
注意
不会在调试信息包中保留在CPACK_BUILD_SOURCE_DIRS
中提供的任何位置下没有路径前缀的源。
- CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX¶
- CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX¶
在软件包安装过程中将源放置到的位置的前缀。
- 必需的:
- 默认:
/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 中添加。
即使设置了组件打包,也创建一个孤立的调试信息包。
- 必需的:
否
- 默认:
OFF
启用此变量时,即使启用了组件打包,仍会生成单个调试信息包。
在将此功能与组件打包结合使用且存在多个组件时,此变量需要
CPACK_RPM_MAIN_COMPONENT
进行设置。
注意
如果未设置任何 CPACK_RPM_<component>_DEBUGINFO_PACKAGE
变量,则当 CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
设置时,CPACK_RPM_DEBUGINFO_PACKAGE
会自动设置为 ON
。
- CPACK_RPM_DEBUGINFO_FILE_NAME¶
- CPACK_RPM_<component>_DEBUGINFO_FILE_NAME¶
在 3.9 版中添加。
调试信息包文件名。
- 必需的:
否
- 默认:
rpmbuild 工具生成的包文件名
另外提供的调试信息包文件名一定以
.rpm
后缀结尾,并应与其他生成包的文件名不同。变量可以包含
@cpack_component@
占位符,如果启用了组件打包,该占位符将由组件名替换,否则它将删除占位符。将该变量设置为
RPM-DEFAULT
可用于明确将文件名生成设置为默认值。
注意
CPACK_RPM_FILE_NAME
还支持由 rpmbuild 工具生成的包文件名 - 默认情况下禁用,但可以通过将变量设置为 RPM-DEFAULT
来启用。
源打包 (SRPM)¶
在 3.7 版中添加。
在通常使用 CPACK_INSTALLED_DIRECTORIES
变量提供包含 CMakeLists.txt 和源文件目录的同时,通过设置 CPACK_RPM_PACKAGE_SOURCES
变量可以启用 SRPM 包装。
对于 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)。
- 必需的:
否
- 默认:
OFF
注意
对于 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¶
v3.22 中的新增内容。
- 必需的:
否
- 默认:
可用于阻止依赖项生成器扫描特定文件或目录以查找依赖项。请注意,你可以使用与所有目录或文件匹配的正则表达式,例如
set(CPACK_RPM_REQUIRES_EXCLUDE_FROM "bin/libqsqloci.*\\.so.*")