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> 指的是以大写形式书写的分组名称。它可以是组件名称或组件组名称。

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

CPack DEB 生成器特定变量列表

CPACK_DEB_COMPONENT_INSTALL

为 CPackDEB 启用组件打包

强制性:

默认:

OFF

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

CPACK_DEBIAN_PACKAGE_NAME
CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME

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

强制性:

默认:

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 软件包纪元

强制性:

默认:

可选数字,当更改版本控制方案或修复旧软件包版本号中的错误时,应增加此数字。

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 策略手册 中定义的那样。

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

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-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) 时,除非首先取消配置将被破坏的软件包 (B),否则 dpkg 将不允许解包声明 Breaks 的软件包 (P)。只要软件包 (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 控制字段中出现的软件包。

强制性:

默认:

Added in version 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 字段。软件包可以在其 control 文件中声明它们应该覆盖某些其他软件包中的文件,或完全替换其他软件包。

强制性:

默认:

Added in version 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 字段。允许软件包声明对其他软件包的强依赖,但不是绝对依赖。

强制性:

默认:

Added in version 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 字段。允许软件包声明建议的软件包安装分组。

强制性:

默认:

Added in version 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 control 文件。兼容性由 CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY 变量值定义。

注意

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

CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY

3.6 版本新增。

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

强制性:

默认:

=

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

请参阅 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")

Added in version 3.4: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA 变量。

CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION

Added in version 3.4.

此变量指示是否应严格遵守关于 control 文件的 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

Added in version 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 字段。软件包可以在其 control 文件中声明它们应如何处理在同一机器上安装不同架构的软件包的情况。

强制性:

默认:

Added in version 3.31: 每个组件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH 变量。

请参阅 https://wiki.debian.org/MultiArch/Hints

注意

此值已验证。它必须是以下值之一: same, foreign, allowed

调试信息的打包

Added in version 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 的文件系统时,只能保留所有者读/写权限。

可复现的软件包

Added in version 3.13.

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