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 资源,出于历史原因在此保留,但不再维护,仍可能证明有用
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 生成器向后兼容,它不是默认设置。没有这个设置,可能会出现重复的名称。重复的文件会被覆盖,打包者需要以一种可以防止此类错误的方式设置变量。
<文件名>[.deb]使用给定的文件名。
3.29 版本中更改: 如果文件名不以
.deb或.ipk结尾,则会自动添加.deb后缀。以前需要后缀。<文件名>.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(如果已设置)。否则,根据 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
可能的值为
lzmaLempel–Ziv–Markov chain 算法
xzXZ Utils 压缩
bzip2bzip2 Burrows–Wheeler 算法
gzipGNU Gzip 压缩
zstd3.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,最好是(在适用时)可以获取原始源代码以及任何附加的上游文档或信息的站点。
- 强制项:
否
- 默认值:
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在开始安装声明了 pre-dependency 的包之前完成被命名包的安装。- 强制项:
否
- 默认值:
对于非组件式安装,为空字符串
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)声明它会 break 其他包(B)时,dpkg不允许 **unpack** 声明Breaks的包(P),除非先将将被 break 的包(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阻止在 breaking 包处于“解包”状态时配置被 broken 的包,但允许两个包同时解包。
- 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 生成器将使用其值作为包中的时间戳。