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 的组件打包
- 强制:
否
- 默认:
OFF
如果启用(
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
此设置建议作为首选行为,但为了向 3.6 版本之前的 CMake 中的 CPack DEB 生成器提供向后兼容性,此项不是默认设置。如果不这样做,可能会出现重复的名称。重复的文件被覆盖,由打包器以防止此类错误发生的方式设置变量。
<file-name>[.deb]
使用给定的文件名。
在 3.29 版本中更改:如果文件名没有以
.deb
或.ipk
结尾,将自动添加.deb
后缀。以前需要后缀。<file-name>.ipk
在 3.10 版本中添加。
使用给定的文件名。OPKG 打包系统使用
.ipk
后缀。
- 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_<组件>_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 手册 中定义。在 3.3 版中添加: 每组件
CPACK_COMPONENT_<compName>_DESCRIPTION
变量。在 3.16 版中添加: 每组件
CPACK_DEBIAN_<COMPONENT>_DESCRIPTION
变量。在 3.16 版中添加: 变量
CPACK_PACKAGE_DESCRIPTION_FILE
。
- CPACK_DEBIAN_PACKAGE_SECTION¶
- CPACK_DEBIAN_<组件>_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¶
Add in 3.1 版本中。
创建 Debian 软件包所用的压缩方式。
- 强制:
是
- 默认:
gzip
可能值是
lzma
Lempel-Ziv-Markov 链算法
xz
XZ 工具压缩
bzip2
bzip2 Burrows-Wheeler 算法
gzip
GNU Gzip 算法
zstd
在 3.22 版本中增加。
Zstandard 算法
- CPACK_DEBIAN_PACKAGE_PRIORITY¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY¶
设置优先级控制字段,如 required(必须)、important(重要)、standard(标准)、optional(可选)、extra(安装)
- 强制:
是
- 默认:
optional(可选)
3.5 版本中增加:Per-component
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) 时,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
的限制还要严格,后者阻止损坏的包在损坏包处于“解包”状态时被配置,但允许两个包同时解包。
- 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 版本中添加。
- 强制:
否
- 默认:
OFF
自动生成 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_<组件>_PACKAGE_MULTIARCH¶
设置 Debian 包的 多架构 字段。包可以在其控制文件中声明在同一台计算机上安装不同架构的包时如何处理情况。
- 强制:
否
- 默认:
对于基于非组件的安装,则为空字符串
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 软件包。
- 强制:
否
- 默认:
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 的文件系统时,只能保留所有者读取/写入权限。
可重复构建的软件包¶
在版本 3.13 中添加。
环境变量 SOURCE_DATE_EPOCH
可以设置为 UNIX 时间戳,定义为自 1970 年 1 月 1 日 00:00:00 UTC 以来排除闰秒的秒数。如果设置,CPack DEB 生成器将在软件包中为时间戳使用其值。