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 资源,这些资源出于历史原因而存在,并且不再维护,但可能仍然有用
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 启用组件打包
- 强制性:
否
- 默认:
OFF
如果启用 (
ON
),则会生成多个包。默认情况下,会生成一个包含所有组件文件的单个包。
- CPACK_DEBIAN_PACKAGE_NAME¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME¶
设置 Package 控制字段(变量会自动转换为小写)。
- 强制性:
是
- 默认:
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>.ipk
3.10 版本新增。
使用给定的文件名。
.ipk
后缀被 OPKG 打包系统使用。
- CPACK_DEBIAN_PACKAGE_EPOCH¶
3.10 版本新增。
Debian 软件包纪元
- 强制性:
否
- 默认:
无
可选数字,当更改版本控制方案或修复旧软件包版本号中的错误时,应增加此数字。
- 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 软件包发行版 - 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 策略手册 中定义的那样。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,最好是(如果适用)可以从中获取原始源代码以及任何其他上游文档或信息的站点。
- 强制性:
否
- 默认:
3.12 版本新增:
CMAKE_PROJECT_HOMEPAGE_URL
变量。注意
此字段的内容是一个简单的 URL,没有任何周围字符,例如 <>。
- CPACK_DEBIAN_PACKAGE_SHLIBDEPS¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS¶
可以设置为 ON 以便使用
dpkg-shlibdeps
生成更好的软件包依赖项列表。- 强制性:
否
- 默认:
如果设置了
CPACK_DEBIAN_PACKAGE_SHLIBDEPS
或OFF
注意
如果您使用此功能,您可能需要将
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) 时,除非首先取消配置将被破坏的软件包 (B),否则dpkg
将不允许解包声明Breaks
的软件包 (P)。只要软件包 (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
更强的限制,后者阻止了被破坏的软件包在破坏软件包处于“已解包”状态时被配置,但允许两个软件包同时解包。
- CPACK_DEBIAN_PACKAGE_PROVIDES¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES¶
设置 Debian 软件包的
Provides
字段。虚拟软件包是指在另一个软件包的Provides
控制字段中出现的软件包。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
基于组件的安装为
CPACK_DEBIAN_PACKAGE_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 文件中声明它们应该覆盖某些其他软件包中的文件,或完全替换其他软件包。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
CPACK_DEBIAN_PACKAGE_REPLACES
用于基于组件的安装。
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
字段。允许软件包声明对其他软件包的强依赖,但不是绝对依赖。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
CPACK_DEBIAN_PACKAGE_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
字段。允许软件包声明建议的软件包安装分组。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
CPACK_DEBIAN_PACKAGE_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
字段指示生成该二进制文件的源。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
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
字段。软件包可以在其 control 文件中声明它们应如何处理在同一机器上安装不同架构的软件包的情况。- 强制性:
否
- 默认:
非基于组件的安装为空字符串
CPACK_DEBIAN_PACKAGE_MULTIARCH
用于基于组件的安装。
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
变量值,请使用 Debug
或 RelWithDebInfo
。
此外,如果设置了 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 生成器将在软件包中使用其值作为时间戳。