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 启用组件打包

强制的:

默认:

关闭

如果启用(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 生成器自行生成 deb 格式的包文件名:

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

或者,提供的包文件名必须以 .deb.ipk 后缀结尾。

在 3.10 版本加入: .ipk OPKG 打包系统使用的后缀。

备注

此变量的首选设置是“DEB-DEFAULT”,但为了与 3.6 版之前的 CMake 中的 CPack DEB 生成器向后兼容,默认情况下禁用此功能。

备注

使用非默认文件名可能会出现重复名称。重复的文件会被覆盖,打包程序将以防止此类错误的方式设置变量。

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_RELEASE 和 CPACK_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 _取决于。如果 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 是空字符串,则只会为该组件设置自动发现的依赖项。

例子:

set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
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_DEBIAN_<COMPONENT>_DESCRIPTION`(仅基于组件的安装程序)如果设置,或 :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION 如果设置,或

  • CPACK_COMPONENT_<compName>_DESCRIPTION`(仅基于组件的安装程序)如果设置,或 :variable:`CPACK_PACKAGE_DESCRIPTION 如果设置,或

  • CPACK_PACKAGE_DESCRIPTION_FILE 中指定的文件内容(如果已设置)

如果在该描述之后未设置,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

设置部分控制字段,例如管理员,开发人员,文档,...

强制的:

是的

默认:

发展

在 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 版本加入.

Z标准压缩

CPACK_DEBIAN_PACKAGE_PRIORITY
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY

设置优先级控制字段,例如必需的,重要的,标准的,可选的,额外的

强制的:

是的

默认:

可选

在 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”字段声明与另一个二进制包发生冲突时,“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 软件包的“替换”字段。包可以在它们的控制文件中声明它们应该覆盖某些其他包中的文件,或者完全替换其他包。

强制的:

默认:

在 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 软件包的“推荐”字段。允许包声明对其他包的强依赖,但不是绝对依赖。

强制的:

默认:

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

强制的:

默认:

在 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 控制文件政策。

强制的:

默认:

错误

用法:

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

备注

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

调试信息的打包

在 3.13 版本加入.

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

Dbgsym 打包有自己的一组变量:

CPACK_DEBIAN_DEBUGINFO_PACKAGE
CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE

启用 dbgsym .deb 包的生成)。

强制的:

默认:

关闭

备注

设置此项还会剥离生成的非 dbgsym 包中的 ELF 文件,这会导致 debuginfo 仅在 dbgsym 包中可用。

备注

二进制文件在打包之前必须包含调试符号,因此使用 DebugRelWithDebInfo 作为 CMAKE_BUILD_TYPE 变量值。

此外,如果设置了 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 生成器将使用它的值作为包中的时间戳。