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 资源,它们出于历史原因在此列出,不再维护,但仍可能有用
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#deb-unix-only
CPack DEB 生成器特有的变量列表
- CPACK_DEB_COMPONENT_INSTALL¶
为 CPackDEB 启用组件打包
- 强制项:
否
- 默认值:
关闭
如果启用(
ON),则生成多个包。默认情况下,生成一个包含所有组件文件的单个包。
- CPACK_DEBIAN_PACKAGE_NAME¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME¶
设置包控制字段(变量会自动转换为小写)。
- 强制项:
是
- 默认值:
CPACK_PACKAGE_NAME对于非组件安装CPACK_DEBIAN_PACKAGE_NAME后缀为-<COMPONENT>对于组件安装。
版本 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>.ipk3.10 版本新增。
使用给定的文件名。
.ipk后缀由 OPKG 打包系统使用。
- CPACK_DEBIAN_PACKAGE_EPOCH¶
3.10 版本新增。
Debian 包的 epoch(时期)
- 强制项:
否
- 默认值:
无
可选数字,在更改版本模式或修复旧包版本号中的错误时应递增。
- CPACK_DEBIAN_PACKAGE_VERSION¶
Debian 包的版本
- 强制项:
是
- 默认值:
此变量只能包含字母数字字符(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 包的 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 依赖关系。
- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_DEPENDS对于组件安装。
版本 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_INSTALL、CPACK_DEBIAN_PACKAGE_SHLIBDEPS或CPACK_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_DEBIAN_<COMPONENT>_DESCRIPTION(仅限基于组件的安装程序)如果已设置,或CPACK_DEBIAN_PACKAGE_DESCRIPTION如果已设置,或CPACK_COMPONENT_<compName>_DESCRIPTION(仅限基于组件的安装程序)如果已设置,或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¶
设置 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
可能的值为
lzmaLempel–Ziv–Markov chain algorithm (Lempel-Ziv Markov 链算法)
xzXZ Utils compression (XZ 实用压缩)
bzip2bzip2 Burrows–Wheeler algorithm (Bzip2 块排序算法)
gzipGNU Gzip compression (GNU Gzip 压缩)
zstd3.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,最好是(如果适用)可以获取原始来源以及任何其他上游文档或信息的网站。
- 强制项:
否
- 默认值:
版本 3.12 中添加:
CMAKE_PROJECT_HOMEPAGE_URL变量。注意
此字段的内容是一个简单的 URL,没有任何包围字符,例如 <>。
- CPACK_DEBIAN_PACKAGE_SHLIBDEPS¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS¶
可以设置为 ON,以便使用
dpkg-shlibdeps来生成更好的包依赖列表。- 强制项:
否
- 默认值:
CPACK_DEBIAN_PACKAGE_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在开始安装声明预依赖的包之前完成预依赖包的安装。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_PREDEPENDS对于组件安装。
版本 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,但方向相反:声明一个包可以增强另一个包的功能。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_ENHANCES对于组件安装。
版本 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) 就不能再次被配置。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_BREAKS对于组件安装。
版本 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将不允许它们在同一时间被安装到系统中。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_CONFLICTS对于组件安装。
版本 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控制字段中的包。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_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字段。包可以在其控制文件中声明它们应该覆盖某些其他包中的文件,或者完全替换其他包。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_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字段。允许包声明对其他包的强烈但非绝对的依赖。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_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字段。允许包声明建议的包安装分组。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_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字段指示生成二进制文件的源。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_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字段。包可以在其控制文件中声明它们如何处理在同一台机器上安装不同架构的包的情况。- 强制项:
否
- 默认值:
对于非组件安装,为空字符串
CPACK_DEBIAN_PACKAGE_MULTIARCH对于组件安装。
版本 3.31 中添加: 每个组件的
CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH变量。参见 https://wiki.debian.org/MultiArch/Hints
注意
此值经过验证。它必须是以下值之一:
same、foreign、allowed。
调试信息打包¶
3.13 版本新增。
Dbgsym 包包含用于调试打包二进制文件的调试符号。
Dbgsym 打包有其自己的变量集
- CPACK_DEBIAN_DEBUGINFO_PACKAGE¶
- CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE¶
启用 dbgsym .ddeb 包的生成。
- 强制项:
否
- 默认值:
关闭
注意
设置此项也会剥离生成的非 dbgsym 包中的 ELF 文件,从而仅在 dbgsym 包中提供调试信息。
注意
在打包之前,二进制文件必须包含调试符号,因此请将 CMAKE_BUILD_TYPE 变量值设置为 Debug 或 RelWithDebInfo。
此外,如果设置了 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 生成器将使用其值作为包中的时间戳。