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¶
设置包控制字段(变量自动转换为小写)。
- 强制的:
是的
- 默认:
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 生成器自行生成 deb 格式的包文件名:
<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
或者,提供的包文件名必须以
.deb或.ipk后缀结尾。在 3.10 版本加入:
.ipkOPKG 打包系统使用的后缀。备注
此变量的首选设置是“DEB-DEFAULT”,但为了与 3.6 版之前的 CMake 中的 CPack DEB 生成器向后兼容,默认情况下禁用此功能。
备注
使用非默认文件名可能会出现重复名称。重复的文件会被覆盖,打包程序将以防止此类错误的方式设置变量。
- 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 _取决于。如果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
可能的值是:
lzmaLempel–Ziv–Markov 链算法
xzXZ Utils 压缩
bzip2bzip2 Burrows–Wheeler 算法
gzipGNU 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,最好是(如果适用)可以从中获取原始来源的网站以及可以找到任何其他上游文档或信息的网站。
- 强制的:
不
- 默认:
在 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在开始安装声明预依赖的包之前完成指定包的安装。- 强制的:
不
- 默认:
非基于组件的安装的空字符串
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”字段声明与另一个二进制包发生冲突时,“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 软件包的“替换”字段。包可以在它们的控制文件中声明它们应该覆盖某些其他包中的文件,或者完全替换其他包。
- 强制的:
不
- 默认:
非基于组件的安装的空字符串
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 软件包的“推荐”字段。允许包声明对其他包的强依赖,但不是绝对依赖。
- 强制的:
不
- 默认:
非基于组件的安装的空字符串
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 软件包的“建议”字段。允许包声明建议的包安装分组。
- 强制的:
不
- 默认:
非基于组件的安装的空字符串
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 控制文件政策。
- 强制的:
不
- 默认:
错误
用法:
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
备注
该值未被解释。也可以传递引用源包的可选修订号。
调试信息的打包¶
在 3.13 版本加入.
Dbgsym 包包含用于调试打包的二进制文件的调试符号。
Dbgsym 打包有自己的一组变量:
- CPACK_DEBIAN_DEBUGINFO_PACKAGE¶
- CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE¶
启用 dbgsym .deb 包的生成)。
- 强制的:
不
- 默认:
关闭
备注
设置此项还会剥离生成的非 dbgsym 包中的 ELF 文件,这会导致 debuginfo 仅在 dbgsym 包中可用。
备注
二进制文件在打包之前必须包含调试符号,因此使用 Debug 或 RelWithDebInfo 作为 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 生成器将使用它的值作为包中的时间戳。