CPack DEB 生成器

内置(二进制)CPack DEB 生成器(仅限 Unix)

CPack Debian (DEB) 生成器特有的变量

CPack DEB 生成器可用于创建 DEB 包,使用 CPack。CPack DEB 生成器是 CPack 生成器,因此它使用 CPack 使用的 CPACK_XXX 变量。

CPack DEB 生成器应能在任何 Linux 主机上工作,但当 Debian 特定的工具 dpkg-xxx 在构建系统上可用时,它将生成更好的 deb 包。

CPack DEB 生成器具有由特定的 CPACK_DEBIAN_XXX 变量控制的特定功能。

CPACK_DEBIAN_<COMPONENT>_XXXX 变量可用于获得**组件**特定的值。但请注意,<COMPONENT> 指的是大写的**分组名称**。它可以是组件名称或组件组名称。

以下是一些 CPack DEB 生成器 wiki 资源,它们出于历史原因在此列出,不再维护,但仍可能有用

CPack DEB 生成器特有的变量列表

CPACK_DEB_COMPONENT_INSTALL

为 CPackDEB 启用组件打包

强制项:

默认值

关闭

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

CPACK_DEBIAN_PACKAGE_NAME
CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME

设置包控制字段(变量会自动转换为小写)。

强制项:

默认值

版本 3.5 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME 变量。

参见 https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-source

CPACK_DEBIAN_FILE_NAME
CPACK_DEBIAN_<COMPONENT>_FILE_NAME

3.6 版本新增。

包文件名。

强制项:

默认值

<CPACK_PACKAGE_FILE_NAME>[-<component>].deb

这可以设置为

DEB-DEFAULT

告诉 CPack 自动生成 deb 格式的包文件名

<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb

此设置被推荐为首选行为,但为了向 CMake 3.6 之前的 CPack DEB 生成器向后兼容,它不是默认设置。没有此设置,可能会发生重复名称。重复文件会被覆盖,包装器需要以一种可以防止此类错误的方式设置变量。

<file-name>[.deb]

使用给定的文件名。

版本 3.29 中更改: 如果文件名不以 .deb.ipk 结尾,则会自动添加 .deb 后缀。以前需要后缀。

<file-name>.ipk

3.10 版本新增。

使用给定的文件名。 .ipk 后缀由 OPKG 打包系统使用。

CPACK_DEBIAN_PACKAGE_EPOCH

3.10 版本新增。

Debian 包的 epoch(时期)

强制项:

默认值

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

CPACK_DEBIAN_PACKAGE_VERSION

Debian 包的版本

强制项:

默认值

CPACK_PACKAGE_VERSION

此变量只能包含字母数字字符(A-Za-z0-9)以及 . + - ~(点、加号、连字符、波浪号)字符,并且应以数字开头。如果未设置 CPACK_DEBIAN_PACKAGE_RELEASE,则不允许使用连字符。

注意

为了与 CMake 3.9 及更低版本向后兼容,当 CPACK_DEBIAN_PACKAGE_RELEASECPACK_DEBIAN_PACKAGE_EPOCH 变量都未设置时,此变量内容的测试失败不是硬性错误。而是报告一个作者警告。

CPACK_DEBIAN_PACKAGE_RELEASE

3.6 版本新增。

Debian 包的 release(发布版本)- Debian 修订号。

强制项:

默认值

这是 DEB 包本身的编号,即打包的版本,而不是内容的版本(参见 CPACK_DEBIAN_PACKAGE_VERSION)。当之前的打包有错误以及/或您想在此处放置一个花哨的 Linux 发行版特定编号时,可以更改默认值。

CPACK_DEBIAN_PACKAGE_ARCHITECTURE
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE

Debian 包的架构

强制项:

默认值

输出 dpkg --print-architecture(如果找不到 dpkg,则为 i386

版本 3.6 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE 变量。

CPACK_DEBIAN_PACKAGE_DEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS

设置此包的 Debian 依赖关系。

强制项:

默认值

版本 3.3 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 变量。

注意

如果为此组件设置了 CPACK_DEBIAN_PACKAGE_SHLIBDEPS 或更具体地说 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS,则发现的依赖关系将被追加到 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 而不是 CPACK_DEBIAN_PACKAGE_DEPENDS。如果 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 是空字符串,则仅为该组件设置自动发现的依赖关系。

版本 3.31 中更改: 变量始终被扩展为一个列表。在此之前,仅当与 CPACK_DEB_COMPONENT_INSTALLCPACK_DEBIAN_PACKAGE_SHLIBDEPSCPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS 配合使用时才被扩展。这意味着如果一个组件没有发现共享库(例如,一个仅由脚本组成的包),您必须自己连接列表才能获得一个有效的 Depends 字段。

示例

set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS cmake)
CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS

3.6 版本新增。

如果使用 CPACK_COMPONENT_<compName>_DEPENDS 变量列出,则设置组件间的依赖关系。

强制项:

默认值

CPACK_DEBIAN_PACKAGE_MAINTAINER

Debian 包的维护者

强制项:

默认值

CPACK_PACKAGE_CONTACT

CPACK_DEBIAN_PACKAGE_DESCRIPTION
CPACK_DEBIAN_<COMPONENT>_DESCRIPTION

Debian 包的描述

强制项:

默认值

如果此后描述未设置,则将使用 CPACK_PACKAGE_DESCRIPTION_SUMMARY(如果已设置)。否则,CPACK_PACKAGE_DESCRIPTION_SUMMARY 将作为描述的第一行添加,如 Debian Policy Manual 中所述。

版本 3.3 中添加: 每个组件的 CPACK_COMPONENT_<compName>_DESCRIPTION 变量。

版本 3.16 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_DESCRIPTION 变量。

版本 3.16 中添加: CPACK_PACKAGE_DESCRIPTION_FILE 变量。

CPACK_DEBIAN_PACKAGE_SECTION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION

设置 Section 控制字段,例如 admin, devel, doc, ...

强制项:

默认值

devel

版本 3.5 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION 变量。

参见 https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections

CPACK_DEBIAN_ARCHIVE_TYPE

3.7 版本中新增。

自版本 3.14 起已弃用。

用于创建 Debian 包的存档格式。

强制项:

默认值

gnutar

可能的值为:gnutar

注意

该变量以前默认为 paxr 值,但 dpkg 从未支持该 tar 格式。为了向后兼容,paxr 值将被映射到 gnutar 并发出弃用消息。

CPACK_DEBIAN_COMPRESSION_TYPE

版本 3.1 中新增。

用于创建 Debian 包的压缩类型。

强制项:

默认值

gzip

可能的值为

lzma

Lempel–Ziv–Markov chain algorithm (Lempel-Ziv Markov 链算法)

xz

XZ Utils compression (XZ 实用压缩)

bzip2

bzip2 Burrows–Wheeler algorithm (Bzip2 块排序算法)

gzip

GNU Gzip compression (GNU Gzip 压缩)

zstd

3.22 版本新增。

Zstandard compression (Zstandard 压缩)

CPACK_DEBIAN_PACKAGE_PRIORITY
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY

设置 Priority 控制字段,例如 required, important, standard, optional, extra

强制项:

默认值

optional

版本 3.5 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY 变量。

参见 https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities

CPACK_DEBIAN_PACKAGE_HOMEPAGE

此包的网站 URL,最好是(如果适用)可以获取原始来源以及任何其他上游文档或信息的网站。

强制项:

默认值

CMAKE_PROJECT_HOMEPAGE_URL

版本 3.12 中添加: CMAKE_PROJECT_HOMEPAGE_URL 变量。

注意

此字段的内容是一个简单的 URL,没有任何包围字符,例如 <>。

CPACK_DEBIAN_PACKAGE_SHLIBDEPS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS

可以设置为 ON,以便使用 dpkg-shlibdeps 来生成更好的包依赖列表。

强制项:

默认值

注意

如果您使用此功能,您可能需要将 CMAKE_INSTALL_RPATH 设置为适当的值,因为如果您不设置,dpkg-shlibdeps 可能找不到您自己的共享库。请参见 https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling

注意

如果您使用此功能,您还可以将 CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS 设置为适当的值,以满足 dpkg-shlibdeps 的要求。但是,您应该只为无法以其他方式解析的私有共享库执行此操作。

版本 3.3 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS 变量。

版本 3.6 中添加: 正确处理 CMAKE_INSTALL_RPATH 中的 $ORIGIN

CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS

在 3.20 版本中添加。

可以设置为一个目录列表,该列表将通过 -l 选项传递给 dpkg-shlibdeps。这些目录将由 dpkg-shlibdeps 搜索,以查找私有共享库依赖关系。

强制项:

默认值

注意

如果您使用 dpkg-shlibdeps,您应该优先将 CMAKE_INSTALL_RPATH 设置为适当的值。当前选项实际上仅用于私有共享库依赖关系。

CPACK_DEBIAN_PACKAGE_DEBUG

调用 cpack 时可以设置此选项,以便在 CPack DEB 生成器运行时跟踪调试信息。

强制项:

默认值

CPACK_DEBIAN_PACKAGE_PREDEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS

设置 Debian 包的 Pre-Depends 字段。与 Depends 类似,但它也强制 dpkg 在开始安装声明预依赖的包之前完成预依赖包的安装。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_ENHANCES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES

设置 Debian 包的 Enhances 字段。类似于 Suggests,但方向相反:声明一个包可以增强另一个包的功能。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_BREAKS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS

设置 Debian 包的 Breaks 字段。当一个二进制包 (P) 声明它会破坏其他包 (B) 时,dpkg 将不允许 **解包** 声明 Breaks 的包 (P),除非首先解配置将要被破坏的包 (B)。只要包 (P) 被配置,先前被解配置的包 (B) 就不能再次被配置。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks

CPACK_DEBIAN_PACKAGE_CONFLICTS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS

设置 Debian 包的 Conflicts 字段。当一个二进制包使用 Conflicts 字段声明与另一个包冲突时,dpkg 将不允许它们在同一时间被安装到系统中。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts

注意

这比 Breaks 限制更严格,Breaks 阻止被破坏的包在破坏包处于“已解包”状态时被配置,但允许两个包同时解包。

CPACK_DEBIAN_PACKAGE_PROVIDES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES

设置 Debian 包的 Provides 字段。虚拟包是指出现在另一个包的 Provides 控制字段中的包。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual

CPACK_DEBIAN_PACKAGE_REPLACES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES

设置 Debian 包的 Replaces 字段。包可以在其控制文件中声明它们应该覆盖某些其他包中的文件,或者完全替换其他包。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_RECOMMENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS

设置 Debian 包的 Recommends 字段。允许包声明对其他包的强烈但非绝对的依赖。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_SUGGESTS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS

设置 Debian 包的 Suggests 字段。允许包声明建议的包安装分组。

强制项:

默认值

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS 变量。

参见 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS

3.6 版本新增。

强制项:

默认值

关闭

允许自动生成 shlibs 控制文件。兼容性由 CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY 变量值定义。

注意

只有当库同时具有库名和版本时,才会考虑这些库。这可以通过使用 set_target_properties() 命令设置 SOVERSION 属性来完成。

CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY

3.6 版本新增。

自动生成的 shlibs 控制文件的兼容性策略。

强制项:

默认值

=

定义自动生成的 shlibs 控制文件的兼容性策略。可能的值:=, >=

参见 https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps

CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA

此变量允许高级用户向 control.tar.gz 添加自定义脚本。典型用法是用于 conffiles、postinst、postrm、prerm。

强制项:

默认值

用法

set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
    "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")

版本 3.4 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA 变量。

CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION

3.4 版本新增。

此变量指示是否应严格遵循 Debian 关于控制文件的策略。

强制项:

默认值

FALSE

用法

set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)

这会覆盖原始文件上的权限,遵循 Debian 策略 https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners 设置的规则。

注意

除非此变量设置为 TRUE,否则最终包中将使用文件的原始权限。特别是,脚本在生成包之前应具有正确的可执行标志。

CPACK_DEBIAN_PACKAGE_SOURCE
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE

3.5 版本新增。

设置二进制 Debian 包的 Source 字段。当二进制包名称与源包名称不同时(尤其是在从一个源生成多个组件/二进制文件时),应通过 Source 字段指示生成二进制文件的源。

强制项:

默认值

参见 https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-source

注意

此值未被解释。也可以传递引用的源包的可选修订号。

CPACK_DEBIAN_PACKAGE_MULTIARCH
CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH

设置 Debian 包的 Multi-Arch 字段。包可以在其控制文件中声明它们如何处理在同一台机器上安装不同架构的包的情况。

强制项:

默认值

版本 3.31 中添加: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH 变量。

参见 https://wiki.debian.org/MultiArch/Hints

注意

此值经过验证。它必须是以下值之一:sameforeignallowed

调试信息打包

3.13 版本新增。

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

Dbgsym 打包有其自己的变量集

CPACK_DEBIAN_DEBUGINFO_PACKAGE
CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE

启用 dbgsym .ddeb 包的生成。

强制项:

默认值

关闭

注意

设置此项也会剥离生成的非 dbgsym 包中的 ELF 文件,从而仅在 dbgsym 包中提供调试信息。

注意

在打包之前,二进制文件必须包含调试符号,因此请将 CMAKE_BUILD_TYPE 变量值设置为 DebugRelWithDebInfo

此外,如果设置了 CPACK_STRIP_FILES,则文件将在它们被传输到 DEB 生成器之前被剥离,因此不包含调试符号,也不会构建 dbgsym 包。请勿与 CPACK_STRIP_FILES 一起使用。

在 Windows 上构建 Debian 包

3.10 版本新增。

为了将 UNIX 文件权限从安装阶段传递到 CPack DEB 生成器,使用了 cmake_mode_t NTFS 备用数据流 (ADT)。

当使用不支持 ADT 的文件系统时,只能保留所有者读/写权限。

可重现的包

3.13 版本新增。

环境变量 SOURCE_DATE_EPOCH 可以设置为 UNIX 时间戳,定义为自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数(不包括闰秒)。如果设置了该变量,CPack DEB 生成器将使用其值作为包中的时间戳。