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 spec 文件实体。有关 spec 文件的信息可以在这里找到 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 资源,它们出于历史原因存在,不再维护,但可能仍然有用

CPack RPM 生成器特定变量列表

CPACK_RPM_COMPONENT_INSTALL

为 CPack RPM 生成器启用组件打包

强制项:

默认:

关闭

如果启用 (ON),则会生成多个包。默认情况下,会生成一个包含所有组件文件的单个包。

CPACK_RPM_PACKAGE_SUMMARY
CPACK_RPM_<component>_PACKAGE_SUMMARY

RPM 包摘要。

强制项:

默认:

CPACK_PACKAGE_DESCRIPTION_SUMMARY

3.2 版本新增: 每个组件的 CPACK_RPM_<component>_PACKAGE_SUMMARY 变量。

CPACK_RPM_PACKAGE_NAME
CPACK_RPM_<component>_PACKAGE_NAME

RPM 包名称。

强制项:

默认:

CPACK_PACKAGE_NAME

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 后缀,将自动添加。以前,后缀是必需的。

注意

通过使用用户提供的 spec 文件、用于生成 debuginfo 包的 rpm 宏扩展,或者简单地使用多个组件,可以生成多个 rpm 文件,无论是一个 spec 文件还是多个 spec 文件 (每个组件执行都会生成自己的 spec 文件)。在这种情况下,由于此变量设置或 spec 文件内容结构,可能会出现重复的文件名。重复的文件将被覆盖,打包者需要以防止此类错误的方式设置变量。

CPACK_RPM_MAIN_COMPONENT

版本 3.8 新增。

不带组件后缀打包的主要组件。

强制项:

默认:

此变量可以设置为任何组件或组名称,以便在文件名和包名中不带组件后缀生成组件或组 rpm 包。

CPACK_RPM_PACKAGE_EPOCH

3.10 版本新增。

RPM 包纪元

强制项:

默认:

可选数字,在更改版本方案或修复旧包的版本号中的错误时应递增。

CPACK_RPM_PACKAGE_VERSION

RPM 包版本。

强制项:

默认:

CPACK_PACKAGE_VERSION

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_PACKAGE_VENDOR,否则为“未知”

CPACK_RPM_PACKAGE_URL
CPACK_RPM_<component>_PACKAGE_URL

项目 URL。

强制项:

默认:

CMAKE_PROJECT_HOMEPAGE_URL

3.12 版本新增: CMAKE_PROJECT_HOMEPAGE_URL 变量。

CPACK_RPM_PACKAGE_DESCRIPTION
CPACK_RPM_<component>_PACKAGE_DESCRIPTION

RPM 包描述。

强制项:

默认:

3.2 版本新增: 每个组件的 CPACK_RPM_<component>_PACKAGE_DESCRIPTION 变量。

CPACK_RPM_COMPRESSION_TYPE

RPM 压缩类型。

强制项:

默认:

(系统默认)

可用于覆盖用于构建 RPM 的 RPM 压缩类型。例如,某些 Linux 发行版默认使用 xzzstd。使用此选项,可以指定要使用的特定压缩类型。

可能的值为

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 autoreq 字段。

强制项:

默认:

可用于启用 (1, yes) 或禁用 (0, no) 自动共享库依赖项检测。依赖项被添加到 requires 列表中。

注意

默认情况下,rpm 生成器启用自动依赖项检测。

CPACK_RPM_PACKAGE_AUTOPROV
CPACK_RPM_<component>_PACKAGE_AUTOPROV

RPM spec autoprov 字段。

强制项:

默认:

可用于启用 (1, yes) 或禁用 (0, no) 包提供的共享库的自动列表。共享库被添加到 provides 列表中。

注意

默认情况下,rpm 生成器启用自动提供检测。

CPACK_RPM_PACKAGE_AUTOREQPROV
CPACK_RPM_<component>_PACKAGE_AUTOREQPROV

RPM spec autoreqprov 字段。

强制项:

默认:

变量同时启用/禁用 autoreq 和 autoprov。有关更多详细信息,请参阅 CPACK_RPM_PACKAGE_AUTOREQCPACK_RPM_PACKAGE_AUTOPROV

注意

默认情况下,rpm 启用自动检测功能。

CPACK_RPM_PACKAGE_REQUIRES
CPACK_RPM_<component>_PACKAGE_REQUIRES

RPM spec 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 spec 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 spec 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 spec 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 spec 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 spec requires(preun) 字段。

强制项:

默认:

可用于设置 RPM 卸载前依赖项 (requires(preun))。请注意,设置此变量时必须将整个值括在引号中,例如

set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
CPACK_RPM_PACKAGE_SUGGESTS
CPACK_RPM_<component>_PACKAGE_SUGGESTS

RPM spec suggests 字段。

强制项:

默认:

可用于设置弱 RPM 依赖项 (suggests)。如果 rpmbuild 不支持 Suggests 标签,CPack 将发出警告并忽略此变量。请注意,设置此变量时必须将整个值括在引号中。

CPACK_RPM_PACKAGE_RECOMMENDS
CPACK_RPM_<component>_PACKAGE_RECOMMENDS

在 4.1 版本中新增。

RPM spec recommends 字段。

强制项:

默认:

可用于设置弱 RPM 依赖项 (recommends)。如果 rpmbuild 不支持 Recommends 标签,CPack 将发出警告并忽略此变量。请注意,设置此变量时必须将整个值括在引号中。

CPACK_RPM_PACKAGE_SUPPLEMENTS
CPACK_RPM_<component>_PACKAGE_SUPPLEMENTS

在 4.1 版本中新增。

RPM spec supplements 字段。

强制项:

默认:

可用于设置弱 RPM 依赖项 (supplements)。如果 rpmbuild 不支持 Supplements 标签,CPack 将发出警告并忽略此变量。请注意,设置此变量时必须将整个值括在引号中。

CPACK_RPM_PACKAGE_ENHANCES
CPACK_RPM_<component>_PACKAGE_ENHANCES

在 4.1 版本中新增。

RPM spec enhances 字段。

强制项:

默认:

可用于设置弱 RPM 依赖项 (enhances)。如果 rpmbuild 不支持 Enhances 标签,CPack 将发出警告并忽略此变量。请注意,设置此变量时必须将整个值括在引号中。

CPACK_RPM_PACKAGE_PROVIDES
CPACK_RPM_<component>_PACKAGE_PROVIDES

RPM spec provides 字段。

强制项:

默认:

可用于设置 RPM 依赖项 (provides)。RPM 文件的提供包列表可以用以下命令打印

rpm -qp --provides file.rpm
CPACK_RPM_PACKAGE_OBSOLETES
CPACK_RPM_<component>_PACKAGE_OBSOLETES

RPM spec 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 文件中的 __spec_install_post 部分。这会影响包创建期间的安装步骤,而不是包安装期间。要添加在包安装期间执行的操作,请改用 CPACK_RPM_POST_INSTALL_SCRIPT_FILE

CPACK_RPM_SPEC_MORE_DEFINE

RPM 扩展 spec 定义行。

强制项:

默认:

可用于向生成的 spec 文件添加任何 %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

用户提供的 spec 文件。

强制项:

默认:

可由用户设置,以指定要由 CPack RPM 生成器使用的用户二进制 spec 文件,而不是生成文件。指定的文件将由 configure_file(@ONLY) 处理。

CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE

Spec 文件模板。

强制项:

默认:

如果设置,CPack 将为用户指定的二进制 spec 文件生成一个模板并停止并出现错误。例如,像这样启动 CPack

cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM

用户随后可以使用此文件手动创建自己的二进制 spec 文件,该文件可与 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_FILECPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILECPACK_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

包含安装后/卸载后/事务后脚本的文件路径。

强制项:

默认:

可用于在 spec 文件中嵌入安装后/卸载后/事务后脚本。引用的脚本文件 (或两者) 将被读取并直接放在 %post%postun 部分之后。如果 CPACK_RPM_COMPONENT_INSTALL 设置为 ON,则每个组件的安装/卸载/事务脚本可以用 CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILECPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILECPACK_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 变更日志文件。

强制项:

默认:

可用于在 spec 文件中嵌入变更日志。引用的文件将被读取并直接放在 %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 中新增。

每个组件的重定位路径安装前缀。

强制项:

默认:

CPACK_PACKAGING_INSTALL_PREFIX

可用于为可重定位的 RPM 包设置每个组件的 CPACK_PACKAGING_INSTALL_PREFIX

CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION
CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION

3.3 版本中新增。

从重定位路径列表中删除默认安装前缀。

强制项:

默认:

CPACK_PACKAGING_INSTALL_PREFIXCPACK_RPM_<COMPONENT>_PACKAGE_PREFIX 被视为重定位路径之一

可用于从可重定位的 RPM 前缀路径中删除 CPACK_PACKAGING_INSTALL_PREFIXCPACK_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 宏压缩的其他手册页目录。变量内容必须是指向包含手册页文件或直接指向手册页文件的目录的正则表达式列表。请注意,为了压缩手册页,路径也必须存在于 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 包,其中共享库没有设置执行权限。

注意

没有执行权限的程序和共享库在从二进制文件中分离调试符号以用于 debuginfo 包时会被忽略。

调试信息的打包

3.7 版本中新增。

Debuginfo 包包含用于调试打包二进制文件的调试符号和源。

Debuginfo RPM 打包有自己的一组变量

CPACK_RPM_DEBUGINFO_PACKAGE
CPACK_RPM_<component>_DEBUGINFO_PACKAGE

启用 debuginfo RPM 包的生成。

强制项:

默认:

关闭

注意

二进制文件在打包前必须包含调试符号,因此对于 CMAKE_BUILD_TYPE 变量值,请使用 DebugRelWithDebInfo

此外,如果设置了 CPACK_STRIP_FILES,文件将在到达 RPM 生成器之前被剥离,因此将不包含调试符号,并且不会构建 debuginfo 包。不要与 CPACK_STRIP_FILES 一起使用。

注意

从没有二进制文件、有二进制文件但没有执行权限或没有调试符号的包生成的包将导致打包终止。

CPACK_BUILD_SOURCE_DIRS

提供构建二进制文件的源文件的根目录位置。

强制项:

如果设置了 CPACK_RPM_DEBUGINFO_PACKAGE,则为“是”

默认:

注意

对于 CMake 项目,CPACK_BUILD_SOURCE_DIRS 默认设置为指向 CMAKE_SOURCE_DIRCMAKE_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

包含应从 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 时,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 版本中新增。

SRPM 打包通过设置 CPACK_RPM_PACKAGE_SOURCES 变量来启用,通常同时使用 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.*")