CPack 外部生成器¶
3.13 版中已添加。
CPack 提供了许多生成器,用于为各种平台和软件包系统创建软件包。此举旨在让 CMake/CPack 成为构建和软件打包的端到端完整解决方案。但由于技术限制或需要使用某些工具的策略,并非始终都能将 CPack 用于整个软件包流程。为此,CPack 提供了“外部”生成器,允许外部软件包软件利用 CPack 提供的部分功能,例如组件安装和依赖项图表。
与外部软件包工具集成¶
CPack 外部生成器生成一个 .json
文件,其中包含 CPack 内部元数据,该元数据向外部软件提供如何打包软件的信息。外部软件包软件本身可以调用 CPack,使用生成的元数据,并根据需要安装和打包文件。
此外,CPack 还可通过 CPACK_EXTERNAL_PACKAGE_SCRIPT
中的自定义 CMake 脚本调用外部软件包软件。
当通过 CPACK_EXTERNAL_ENABLE_STAGING
变量启用时,生成器还可以选择性地负责安装文件的暂存。
JSON 格式¶
JSON 元数据文件包含 CPack 组件和组件组的列表,传递给 cpack_add_component()
和 cpack_add_component_group()
的各种选项,组件和组件组之间的依赖项以及传递给 CPack 的其他各种选项。
JSON 的根对象将始终提供两个字段:formatVersionMajor
和 formatVersionMinor
,它们始终是描述生成器输出格式的整数。向输出格式添加后向兼容的变化(例如,添加一个以前不存在的新字段)会导致次版本号递增,而向后不兼容的变化(例如,删除字段或更改其含义)会导致主版本号递增,次版本号重置为 0。格式版本始终采用 major.minor
格式。换句话说,它始终有两个部分,由英文句点分隔。
你可以请求输出格式的一个或多个特定版本,如下所述,其中 CPACK_EXTERNAL_REQUESTED_VERSIONS
。输出格式将具有与请求的主版本号完全匹配的主版本号,以及大于或等于请求的次版本号。如果未使用 CPACK_EXTERNAL_REQUESTED_VERSIONS
请求任何版本,则默认情况下使用已知的最新主版本。目前,唯一受支持的格式是下面描述的 1.0。
版本 1.0¶
除了标准格式字段外,格式版本 1.0 还在根目录中提供了以下字段
components
components
字段是一个对象,其中组件名称作为键,描述组件的对象作为值。组件对象具有以下字段name
组件的名称。这始终与
components
对象中的键相同。displayName
传递给
cpack_add_component()
的DISPLAY_NAME
字段的值。description
传递给
cpack_add_component()
的DESCRIPTION
字段的值。isHidden
如果
HIDDEN
已传递给cpack_add_component()
,则为 True,否则为 false。isRequired
如果
REQUIRED
已传递给cpack_add_component()
,则为 True,否则为 false。isDisabledByDefault
如果
DISABLED
已传递给cpack_add_component()
,则为 True,否则为 false。组
只有当将
GROUP
传递给cpack_add_component()
时才显示。如果传入了,此字段是一个包含组件组的字符串值。依赖项
组件依赖项的数组。这包含传递给
cpack_add_component()
的DEPENDS
参数中的值。如果没有传递DEPENDS
参数,则此字段是一个空列表。安装类型
组件所属的安装类型的数组。这包含传递给
cpack_add_component()
的INSTALL_TYPES
参数中的值。如果没有传递INSTALL_TYPES
参数,则此字段是一个空列表。已下载
如果将
DOWNLOADED
传递给cpack_add_component()
,则为 True;否则为 false。档案文件
使用
ARCHIVE_FILE
参数传递给cpack_add_component()
的档案文件名。如果没有传递ARCHIVE_FILE
参数,则此字段是一个空字符串。
组件组
componentGroups
字段是一个对象,其组件组名称作为键,将描述组件组的对象作为值。组件组对象有以下字段name
组件组的名称。这始终与
componentGroups
对象中的键相同。displayName
传递给
cpack_add_component_group()
的DISPLAY_NAME
字段的值。description
传递给
cpack_add_component_group()
的DESCRIPTION
字段的值。父组
仅在将
PARENT_GROUP
传给cpack_add_component_group()
时才包含。如果是这样,则此字段是包含组件组父组的字符串值。isExpandedByDefault
如果将
EXPANDED
传给cpack_add_component_group()
,则该字段为 True;如果没有,则该字段为 false。isBold
如果将
BOLD_TITLE
传给cpack_add_component_group()
,则该字段为 True;如果没有,则该字段为 false。components
组件名称数组,这些组件是组的直接成员(即组件的
GROUP
为此组的组件)。不包括子组的组件。subgroups
组件组名称数组,这些组件组是组的子组(即组件组的
PARENT_GROUP
为此组的组件组)。
安装类型
字段
installationTypes
是一个对象,其安装类型名称为键,描述安装类型的对象为值。安装类型对象具有以下字段name
安装类型的名称。此名称始终与
installationTypes
对象中的键相同。displayName
传给
cpack_add_install_type()
的DISPLAY_NAME
字段的值。索引
列表中安装类型的整数索引。
projects
字段
projects
是包含描述组成 CPack 项目的 CMake 项目的对象的数组。此字段中的值派生自CPACK_INSTALL_CMAKE_PROJECTS
。在大多数情况下,这将只是一个项目。项目对象具有以下字段projectName
传给
CPACK_INSTALL_CMAKE_PROJECTS
的项目名称。component
包含项目的组件或组件集的名称。
directory
CMake 项目的构建目录。这是包含
cmake_install.cmake
脚本的目录。subDirectory
在 CPack 软件包中将项目安装到的子目录。
packageName
在
CPACK_PACKAGE_NAME
中给出的软件包名称。仅在设置此选项时才存在。packageVersion
CPACK_PACKAGE_VERSION
中给出的软件包版本。仅当设置此选项时才显示。packageDescriptionFile
CPACK_PACKAGE_DESCRIPTION_FILE
中给出的软件包说明文件。仅当设置此选项时才显示。packageDescriptionSummary
CPACK_PACKAGE_DESCRIPTION_SUMMARY
中给出的软件包说明摘要。仅当设置此选项时才显示。buildConfig
利用
cpack -C
选项提供给 CPack 的构建配置。仅当设置此选项时才显示。defaultDirectoryPermissions
CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
中给出的默认目录权限。仅当设置此选项时才显示。setDestdir
当
CPACK_SET_DESTDIR
为真时为真,当CPACK_SET_DESTDIR
为假时为假。packagingInstallPrefix
CPACK_PACKAGING_INSTALL_PREFIX
中给出的安装前缀。仅当CPACK_SET_DESTDIR
为真时才显示。stripFiles
当
CPACK_STRIP_FILES
为真时为真,当CPACK_STRIP_FILES
为假时为假。warnOnAbsoluteInstallDestination
当
CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
为真时为真,当CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
为假时为假。errorOnAbsoluteInstallDestination
当
CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
为真时为真,当CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
为假时为假。
特定于 CPack External 生成器的变量¶
- CPACK_EXTERNAL_REQUESTED_VERSIONS¶
此变量用于请求特定版本的 CPack External 生成器。该变量是一个
major.minor
值列表,用分号分隔。如果将此变量设置为非空值,CPack External 生成器将遍历列表中的每个项目以搜索它知道如何生成其版本的版本。应根据客户端软件的下降首选项对请求版本进行列出,因为列表中的第一个匹配版本将会被生成。
如果生成器的主要版本与请求的主要版本完全匹配,且其次要版本大于或等于请求的次要版本,则该生成器知道如何生成该版本。例如,如果
CPACK_EXTERNAL_REQUESTED_VERSIONS
包含 1.0,而 CPack External 生成器知道如何生成 1.1,则它会生成 1.1。如果生成器不知道如何生成列表中的版本,它将跳过该版本并查看下一个版本。如果生成器不知道如何生成任何请求的版本,则会抛出错误。如果未设置此变量,或者它为空,CPack External 生成器将生成它知道如何生成的最大主要版本和次要版本。
如果在
CPACK_EXTERNAL_REQUESTED_VERSIONS
中遇到无效版本(与major.minor
不匹配,其中major
和minor
是整数),将忽略该版本。
- CPACK_EXTERNAL_ENABLE_STAGING¶
此变量可以设置为 true 以启用可选安装到临时暂存区域,然后可以由外部打包工具拾取该安装并打包。CPack 用于当前打包任务的顶级目录包含在
CPACK_TOPLEVEL_DIRECTORY
中。在打包开始之前,它会在每次运行时自动清理,并且可以用作外部打包工具所需的自定义临时文件。它还包含暂存区域CPACK_TEMPORARY_DIRECTORY
,当启用暂存时,CPack 将安装执行到其中。
- CPACK_EXTERNAL_PACKAGE_SCRIPT¶
此变量可以将一个 CMake 脚本文件的完整路径(该文件作为 CPack 调用的一部分运行)作为可选项指定。它在(可选)暂存完成后调用,并且可能运行外部打包工具。该脚本可以访问 CPack 配置文件定义的变量。
- CPACK_EXTERNAL_BUILT_PACKAGES¶
在版本 3.19 中添加。
CPACK_EXTERNAL_PACKAGE_SCRIPT
脚本可以将此列表变量设置为已生成包文件的完整路径。CPack 将把这些文件从暂存目录复制回顶级构建目录,如果CPACK_PACKAGE_CHECKSUM
已设置,则可能生成校验和文件。