CPack DEB 生成器

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

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

CPack DEB 生成器可用于创建 DEB 包,使用 CPack。CPack DEB 生成器是一个 CPack 生成器,因此它使用 CPACK_XXX 变量,这些变量由 CPack 使用。

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 生成器向后兼容,它不是默认设置。没有这个设置,可能会出现重复的名称。重复的文件会被覆盖,打包者需要以一种可以防止此类错误的方式设置变量。

<文件名>[.deb]

使用给定的文件名。

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

<文件名>.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(如果已设置)。否则,根据 Debian Policy Manual 的定义,CPACK_PACKAGE_DESCRIPTION_SUMMARY 将作为描述的第一行添加。

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 算法

xz

XZ Utils 压缩

bzip2

bzip2 Burrows–Wheeler 算法

gzip

GNU Gzip 压缩

zstd

3.22 版本新增。

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 在开始安装声明了 pre-dependency 的包之前完成被命名包的安装。

强制项:

默认值

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)声明它会 break 其他包(B)时,dpkg 不允许 **unpack** 声明 Breaks 的包(P),除非先将将被 break 的包(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 阻止在 breaking 包处于“解包”状态时配置被 broken 的包,但允许两个包同时解包。

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 生成器将使用其值作为包中的时间戳。