包装

为二进制安装程序和源包配置生成器。

介绍

CPack 模块生成配置文件“CPackConfig.cmake”和“CPackSourceConfig.cmake”。它们旨在用于 cpack 程序的后续运行,在那里它们引导安装程序或/和源包的生成。

根据 CMake 生成器,CPack 模块还可以添加两个新的构建目标,package 和``package_source``。有关详细信息,请参阅下面的“打包目标”部分。

生成的二进制安装程序将包含通过 CMake 的 install() 命令(以及已弃用的命令 install_files()install_programs()install_targets())安装的所有文件。请注意:command:install 命令的``DESTINATION`` 选项必须是相对路径;否则安装的文件将被 CPack 忽略。

可以配置某些类型的二进制安装程序,以便用户可以选择要安装的单个应用程序组件。有关更多详细信息,请参阅 CPackComponent 模块。

源包(通过 CPackSourceConfig.cmake 配置并由 CPack Archive Generator 生成)将包含项目目录中的所有源文件,CPACK_SOURCE_IGNORE_FILES 中指定的除外。

CPack 生成器

CPACK_GENERATOR 变量在不同的上下文中具有不同的含义。在 CMakeLists.txt 文件中, CPACK_GENERATOR 是一个 生成器列表: 当 cpack 没有其他参数运行时,它将遍历列出并为每个生成器生成一个包。在 CPACK_PROJECT_CONFIG_FILE 中, CPACK_GENERATOR 是一个*字符串命名单个生成器*。如果您需要每个 cpack 生成器逻辑来控制 other cpack 设置,那么您需要一个 CPACK_PROJECT_CONFIG_FILE。如果设置,CPACK_PROJECT_CONFIG_FILE 将自动包含在每个生成器的基础上。它只需要包含覆盖。

它是这样工作的:

  • cpack 运行

  • 它包括``CPackConfig.cmake``

  • 它遍历 -G 命令行选项给出的生成器,或者如果没有指定这样的选项,则遍历由 CPACK_GENERATOR 变量设置的生成器列表``CPackConfig.cmake`` 输入文件。

  • foreach 生成器,然后

这是关键:对于 CPackConfig.cmake 中的 CPACK_GENERATOR 中列出的每个生成器,cpack 将在内部*重置* CPACK_GENERATOR 为*当前正在使用的*,然后包括 CPACK_PROJECT_CONFIG_FILE

有关可用生成器的列表,请参阅 cpack-generators(7)

目标包和 package_source

如果 CMake 与 Makefile、Ninja 或 Xcode 生成器一起运行,则 include(CPack) 会生成一个目标 package。这使得从 CMake、Make 或 Ninja 构建二进制安装程序成为可能:可以调用 cmake --build 而不是 ``cpack。 --target package`` 或 make packageninja package。 VS 生成器创建一个大写目标“PACKAGE”。

如果 CMake 使用 Makefile 或 Ninja 生成器运行,则 include(CPack) 也会生成一个目标 package_source。要构建源包,而不是 cpack -G TGZ --config CPackSourceConfig.cmake 可以调用 cmake --build --target package_sourcemake package_sourceninja package_source

所有 CPack 生成器通用的变量

在您的“CMakeLists.txt”文件中包含此 CPack 模块之前,可以设置各种变量来自定义生成的安装程序。最常用的变量是:

CPACK_PACKAGE_NAME

包(或应用程序)的名称。如果未指定,则默认为项目名称。

CPACK_PACKAGE_VENDOR

包供应商的名称。 (例如,“Kitware”)。默认值为“人性化”。

CPACK_PACKAGE_DIRECTORY

CPack 进行打包的目录。如果未设置,则这将默认(内部)到构建目录。这个变量可以在 CPack 配置文件中定义,也可以从 cpack 命令行选项 -B 中定义。如果设置,命令行选项将覆盖在配置文件中找到的值。

CPACK_PACKAGE_VERSION_MAJOR

包主要版本。此变量将始终设置,但其默认值取决于是否将版本详细信息提供给顶层 CMakeLists.txt 文件中的 project() 命令。如果提供了版本详细信息,则默认值为 CMAKE_PROJECT_VERSION_MAJOR。如果没有给出版本详细信息,将假定默认版本为 0.1.1,导致 CPACK_PACKAGE_VERSION_MAJOR 的默认值为 0。

CPACK_PACKAGE_VERSION_MINOR

包次要版本。默认值取决于版本详细信息是否提供给顶层 CMakeLists.txt 文件中的 project() 命令。如果提供了版本详细信息,则默认值为 CMAKE_PROJECT_VERSION_MINOR,但如果未指定次要版本组件,则``CPACK_PACKAGE_VERSION_MINOR`` 将保持未设置状态。如果根本没有给出项目版本,将假定默认版本为 0.1.1,导致 CPACK_PACKAGE_VERSION_MINOR 的默认值为 1。

CPACK_PACKAGE_VERSION_PATCH

包补丁版本。默认值取决于版本详细信息是否提供给顶层 CMakeLists.txt 文件中的 project() 命令。如果给出了版本详细信息,则默认值为 CMAKE_PROJECT_VERSION_PATCH,但如果未指定补丁版本组件,则 CPACK_PACKAGE_VERSION_PATCH 将保持未设置状态。如果根本没有给出项目版本,将假定默认版本为 0.1.1,导致 CPACK_PACKAGE_VERSION_PATCH 的默认值为 1。

CPACK_PACKAGE_DESCRIPTION

项目的描述,用于 CPack 生成的 Windows 安装程序的介绍屏幕等地方。如果未设置,此变量的值将从 CPACK_PACKAGE_DESCRIPTION_FILE 命名的文件中填充。

CPACK_PACKAGE_DESCRIPTION_FILE

未明确设置 CPACK_PACKAGE_DESCRIPTION 时用于描述项目的文本文件。 CPACK_PACKAGE_DESCRIPTION_FILE 的默认值指向内置模板文件``Templates/CPack.GenericDescription.txt``。

CPACK_PACKAGE_DESCRIPTION_SUMMARY

项目的简短描述(只有几句话)。如果设置了 CMAKE_PROJECT_DESCRIPTION 变量,它将用作默认值,否则默认值将是 CMake 基于 CMAKE_PROJECT_NAME 生成的字符串。

CPACK_PACKAGE_HOMEPAGE_URL

项目主页 URL。默认值取自 CMAKE_PROJECT_HOMEPAGE_URL 变量,该变量由顶级 project() 命令设置,否则如果没有向 project() 提供 URL,则默认值为空。

CPACK_PACKAGE_FILE_NAME

要生成的包文件的名称,不包括扩展名。例如,cmake-2.6.1-Linux-i686。默认值为::

${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}
CPACK_PACKAGE_INSTALL_DIRECTORY

目标系统上的安装目录。一些 CPack 生成器(如 NSIS)可能会使用它来创建安装目录,例如安装前缀下方的“CMake 2.5”。所有安装的元素都将放在这个目录中。

CPACK_PACKAGE_ICON

将在安装程序中显示的品牌图像(由 GUI 安装程序使用)。

CPACK_PACKAGE_CHECKSUM

在 3.7 版本加入.

一种算法,用于生成带有包校验和的附加文件。输出文件名将是

${CPACK_PACKAGE_FILE_NAME}.${CPACK_PACKAGE_CHECKSUM}

支持的算法是 string(<HASH>) 命令列出的算法。

CPACK_PROJECT_CONFIG_FILE

CPack-time 项目 CPack 配置文件。此文件包含在 cpack 时间,在 CPack 将 CPACK_GENERATOR 设置为实际使用的生成器后,每个生成器一次。它允许在 cpack 时间为每个生成器设置 CPACK_* 变量。

CPACK_RESOURCE_FILE_LICENSE

嵌入在安装程序中的许可证。它通常会在安装之前由生成的安装程序显示给用户(对于图形安装程序,通常带有明确的“接受”按钮)。此许可证文件未添加到已安装的文件中,但被某些 CPack 生成器(如 NSIS)使用。如果要使用 UTF-8 字符,则需要将文件编码为 UTF-8 BOM。如果您想随项目一起安装许可证文件(可能与此文件相同),则必须在 CMakeLists.txt 中添加适当的 CMake:command:install 命令。

CPACK_RESOURCE_FILE_README

要嵌入安装程序的自述文件。它通常会在安装过程中详细描述项目的目的。并非所有 CPack 生成器都使用此文件。

CPACK_RESOURCE_FILE_WELCOME

欢迎文件嵌入到安装程序中。它欢迎用户使用此安装程序。通常用于 Windows 和 Mac OS X 上的图形安装程序。

CPACK_MONOLITHIC_INSTALL

禁用基于组件的安装机制。设置后,组件规范将被忽略,所有已安装的项目都放在一个“MONOLITHIC”包中。一些 CPack 生成器默认进行整体打包,并且可能会被要求通过将 CPACK_<GENNAME>_COMPONENT_INSTALL 设置为 TRUE 来进行组件打包。

CPACK_GENERATOR

要使用的 CPack 生成器列表。如果未指定,CPack 将创建一组遵循命名模式的选项 CPACK_BINARY_<GENNAME>`(例如``CPACK_BINARY_NSIS`)允许用户启用/禁用各个生成器。如果在 cpack 命令行上给出了 -G 选项,它将覆盖此变量和任何 CPACK_BINARY_<GENNAME> 选项.

CPACK_OUTPUT_CONFIG_FILE

CPack 二进制配置文件的名称。此文件是由 CPack 模块为二进制安装程序生成的 CPack 配置。默认为“CPackConfig.cmake”。

CPACK_PACKAGE_EXECUTABLES

列出每个可执行文件和关联的文本标签,用于创建开始菜单快捷方式。例如,将此设置为列表 ccmake;CMake 将创建一个名为“CMake”的快捷方式,该快捷方式将执行已安装的可执行文件 ccmake。并非所有 CPack 生成器都使用它(至少 NSIS 和 WIX 使用)。

CPACK_STRIP_FILES

要删除的文件列表。从 CMake 2.6.0 开始,CPACK_STRIP_FILES 将是一个布尔变量,可以剥离所有文件(文件列表在 CMake 中计算为 TRUE,因此此更改是兼容的)。

CPACK_VERBATIM_VARIABLES

在 3.4 版本加入.

如果设置为“TRUE”,以“CPACK”为前缀的变量值将在写入配置文件之前进行转义,以便 cpack 程序完全按照指定的方式接收它们。否则,引号和反斜杠等字符可能会导致解析错误或更改 cpack 程序接收到的值。为了向后兼容,默认为“FALSE”。

CPACK_THREADS

在 3.20 版本加入.

执行并行操作时使用的线程数,例如压缩安装程序包。

CPack 生成器(例如 Debian 或 Archive)使用的一些压缩方法可能会利用多个 CPU 内核来加速压缩。 CPACK_THREADS 可以设置为指定将使用多少线程进行压缩。

正整数可用于指定确切的所需线程数。

当给定一个负整数时,CPack 将使用绝对值作为上限,但可以根据可用的硬件并发选择一个较低的值。

给定 0 CPack 将尝试使用所有可用的 CPU 内核。

默认情况下,“CPACK_THREADS”设置为“1”。

以下压缩方法可以利用多核:

xz

如果 CMake 是使用支持并行压缩的 liblzma 构建的,则支持。

在 3.21 版本加入: cmake.org 上可用的官方 CMake 二进制文件现在附带支持并行压缩的 liblzma。旧版本没有。

zstd

在 3.24 版本加入.

如果 CMake 是使用 libarchive 3.6 或更高版本构建的,则受支持。 cmake.org 上提供的官方 CMake 二进制文件支持它。

其他压缩方法忽略此值并仅使用一个线程。

源包生成器的变量

以下 CPack 变量特定于源包,不会影响二进制包:

CPACK_SOURCE_PACKAGE_FILE_NAME

源包的名称。例如``cmake-2.6.1``。

CPACK_SOURCE_STRIP_FILES

将被剥离的源树中的文件列表。从 CMake 2.6.0 开始,CPACK_SOURCE_STRIP_FILES 将是一个布尔变量,可以剥离所有文件(文件列表在 CMake 中计算为 TRUE,因此此更改是兼容的)。

CPACK_SOURCE_GENERATOR

用于源包的生成器列表。与 CPACK_GENERATOR 一样,如果未指定,则 CPack 将创建一组选项(例如 CPACK_SOURCE_ZIP),允许用户选择将生成哪些包。

CPACK_SOURCE_OUTPUT_CONFIG_FILE

CPack 源配置文件的名称。此文件是由 CPack 模块为源安装程序生成的 CPack 配置。默认为“CPackSourceConfig.cmake”。

CPACK_SOURCE_IGNORE_FILES

构建源包时不会打包的源树中的文件模式。这是一个正则表达式模式列表(必须正确转义),例如,/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope .*

高级使用的变量

以下变量用于 CPack 的高级用途:

CPACK_CMAKE_GENERATOR

如果项目是 CMake 项目,应该使用什么 CMake 生成器。默认为 CMAKE_GENERATOR 的值。很少有用户会想要更改此设置。

CPACK_INSTALL_CMAKE_PROJECTS

指定要安装的项目的四个值的列表。这四个值是:Build directory、Project Name、Project Component、Directory。如果省略,CPack 将构建一个安装程序来安装所有内容。

CPACK_SYSTEM_NAME

系统名称,默认为 CMAKE_SYSTEM_NAME 的值,但在 Windows 上为 win32win64 除外。

CPACK_PACKAGE_VERSION

打包完整版,内部使用。默认情况下,这是从 CPACK_PACKAGE_VERSION_MAJOR、CPACK_PACKAGE_VERSION_MINOR 和 CPACK_PACKAGE_VERSION_PATCH 构建的。

CPACK_TOPLEVEL_TAG

安装文件的目录。

CPACK_INSTALL_COMMANDS

用于安装组件的额外命令。环境变量“CMAKE_INSTALL_PREFIX”在执行期间设置为临时安装目录。

CPACK_INSTALL_SCRIPTS

在 3.16 版本加入.

CPack 在其本地暂存安装期间执行的额外 CMake 脚本。它们在安装要打包的文件之前执行。这些脚本不会被独立安装调用(例如:make install)。对于每个脚本,将设置以下变量: CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_BINARY_DIR 和 :variable:`CMAKE_INSTALL_PREFIX`(设置为暂存安装目录)。由于历史原因,单数形式的 CMAKE_INSTALL_SCRIPT 被支持作为替代变量,但如果设置了 CMAKE_INSTALL_SCRIPTS 并发出警告,则其值将被忽略。

另见 CPACK_PRE_BUILD_SCRIPTSCPACK_POST_BUILD_SCRIPTS 可用于指定稍后在打包过程中执行的脚本。

CPACK_PRE_BUILD_SCRIPTS

在 3.19 版本加入.

在 CPack 将要打包的文件安装到暂存目录之后以及从这些文件生成包之前要执行的 CMake 脚本列表。另见 CPACK_INSTALL_SCRIPTSCPACK_POST_BUILD_SCRIPTS

CPACK_POST_BUILD_SCRIPTS

在 3.19 版本加入.

在 CPack 生成结果包之后以及将它们复制回构建目录之前要执行的 CMake 脚本列表。另见 CPACK_INSTALL_SCRIPTSCPACK_PRE_BUILD_SCRIPTSCPACK_PACKAGE_FILES

CPACK_PACKAGE_FILES

在 3.19 版本加入.

在暂存目录中创建的包文件列表,每个文件都作为完整的绝对路径提供。在调用 CPACK_POST_BUILD_SCRIPTS 中列出的构建后脚本之前,此变量由 CPack 填充。这是构建后脚本了解要操作的包文件集的首选方式。项目不应尝试自己设置此变量。

CPACK_INSTALLED_DIRECTORIES

要安装的额外目录。

CPACK_PACKAGE_INSTALL_REGISTRY_KEY

安装此项目时使用的注册表项。这仅供 Windows 安装程序使用。默认值基于安装目录。

要创建的桌面链接列表。每个桌面链接都需要一个相应的开始菜单快捷方式,由 CPACK_PACKAGE_EXECUTABLES 创建。

CPACK_BINARY_<GENNAME>

CPack 为二进制生成器生成选项。 CPack.cmake 模块生成(当 CPACK_GENERATOR 未设置时)一组 CMake 选项(参见 CMake option() 命令),然后可用于选择 CPack 生成器(s ) 在构建 package 目标或运行 cpack 时使用,但不使用 -G 选项。

CPACK_READELF_EXECUTABLE

在 3.25 版本加入.

指定 CPack 使用的 readelf 可执行路径。设置时默认值为“CMAKE_READELF”。否则,默认值为空,CPack 将在需要时使用 find_program() 确定 readelf 路径。

CPACK_OBJCOPY_EXECUTABLE

在 3.25 版本加入.

指定 CPack 使用的 objcopy 可执行路径。设置时默认值为“CMAKE_OBJCOPY”。否则,默认值为空,CPack 将在需要时使用 find_program() 确定 objcopy 路径。

CPACK_OBJDUMP_EXECUTABLE

在 3.25 版本加入.

指定 CPack 使用的 objdump 可执行路径。设置时默认值为“CMAKE_OBJDUMP”。否则,默认值为空,CPack 将在需要时使用 find_program() 确定 objdump 路径。