CPack DEB 生成器

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

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

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

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

CPack DEB 生成器具有特殊功能,这些功能由具体的 CPACK_DEBIAN_XXX 变量控制。

CPACK_DEBIAN_<COMPONENT>_XXXX 变量可用于拥有组件特定值。但请注意,<COMPONENT> 指的是以大写形式书写的 分组名。它可能是组件名称或组件 GROUP 名称。

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

CPack DEB 生成器特定变量列表

CPACK_DEB_COMPONENT_INSTALL

启用 CPackDEB 的组件打包

强制:

默认:

OFF

如果启用(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

此设置建议作为首选行为,但为了向 3.6 版本之前的 CMake 中的 CPack DEB 生成器提供向后兼容性,此项不是默认设置。如果不这样做,可能会出现重复的名称。重复的文件被覆盖,由打包器以防止此类错误发生的方式设置变量。

<file-name>[.deb]

使用给定的文件名。

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

<file-name>.ipk

在 3.10 版本中添加。

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

CPACK_DEBIAN_PACKAGE_EPOCH

在 3.10 版本中添加。

Debian 包历元

强制:

默认:

更改版本控制模式或修复较旧包的版本号中的错误时应增长的可选序号。

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 包发版 - 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 手册 中定义。

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

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

在 3.16 版中添加: 变量 CPACK_PACKAGE_DESCRIPTION_FILE

CPACK_DEBIAN_PACKAGE_SECTION
CPACK_DEBIAN_<组件>_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

Add in 3.1 版本中。

创建 Debian 软件包所用的压缩方式。

强制:

默认:

gzip

可能值是

lzma

Lempel-Ziv-Markov 链算法

xz

XZ 工具压缩

bzip2

bzip2 Burrows-Wheeler 算法

gzip

GNU Gzip 算法

zstd

在 3.22 版本中增加。

Zstandard 算法

CPACK_DEBIAN_PACKAGE_PRIORITY
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY

设置优先级控制字段,如 required(必须)、important(重要)、standard(标准)、optional(可选)、extra(安装)

强制:

默认:

optional(可选)

3.5 版本中增加:Per-component 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-shlibdepsdpkg-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 的限制还要严格,后者阻止损坏的包在损坏包处于“解包”状态时被配置,但允许两个包同时解包。

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 版本中添加。

强制:

默认:

OFF

自动生成 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_<组件>_PACKAGE_MULTIARCH

设置 Debian 包的 多架构 字段。包可以在其控制文件中声明在同一台计算机上安装不同架构的包时如何处理情况。

强制:

默认:

在版本 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 软件包。

强制:

默认:

OFF

注意

设置此项还会去除生成的非 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 生成器将在软件包中为时间戳使用其值。