CPack¶
该模块用于配置二进制安装程序和源代码包的生成器。
在 CMake 项目中加载此模块,使用
include(CPack)
简介¶
CPack 模块会生成配置文件 CPackConfig.cmake 和 CPackSourceConfig.cmake。这些文件旨在随后的 cpack 程序运行中使用,用于指导安装程序或/和源代码包的生成。
根据 CMake 生成器的不同,CPack 模块可能会添加两个新的构建目标:package 和 package_source。有关详细信息,请参阅下方的 打包目标 部分。
生成的二进制安装程序将包含所有通过 CMake 的 install() 命令(以及已弃用的命令 install_files()、install_programs() 和 install_targets())安装的文件。请注意,install() 命令的 DESTINATION 选项必须为相对路径;否则,CPack 将忽略这些已安装的文件。
某些类型的二进制安装程序可以进行配置,以便用户能够选择要安装的单个应用程序组件。有关详细信息,请参阅 CPackComponent 模块。
源代码包(通过 CPackSourceConfig.cmake 配置并由 CPack 归档生成器 生成)将包含项目目录中的所有源文件,但 CPACK_SOURCE_IGNORE_FILES 中指定的文件除外。
CPack 生成器¶
CPACK_GENERATOR 变量在不同上下文中具有不同含义。在 CMakeLists.txt 文件中,CPACK_GENERATOR 是一个生成器列表:当运行 cpack 且没有其他参数时,它将遍历该列表并为每个生成器生成一个包。在 CPACK_PROJECT_CONFIG_FILE 中,CPACK_GENERATOR 是一个命名单个生成器的字符串。如果您需要针对每个 cpack 生成器的逻辑来控制其他 cpack 设置,则需要一个 CPACK_PROJECT_CONFIG_FILE。如果设置了此项,CPACK_PROJECT_CONFIG_FILE 将会在每个生成器的基础上自动包含。它仅需包含覆盖配置。
工作原理如下:
cpack运行它包含
CPackConfig.cmake它遍历
-G命令行选项给出的生成器;如果没有指定该选项,则遍历CPackConfig.cmake输入文件中CPACK_GENERATOR变量给出的生成器列表。对于每个生成器,它会执行以下操作:
将
CPACK_GENERATOR设置为当前正在迭代的那个为该生成器制作包
关键点:对于 CPackConfig.cmake 中 CPACK_GENERATOR 列出的每个生成器,cpack 将在内部重置 CPACK_GENERATOR 为当前正在使用的那个,然后包含 CPACK_PROJECT_CONFIG_FILE。
有关可用生成器的列表,请参阅 cpack-generators(7)。
目标 package 和 package_source¶
如果使用 Makefile、Ninja 或 Xcode 生成器运行 CMake,则 include(CPack) 会生成一个 package 目标。这使得从 CMake、Make 或 Ninja 构建二进制安装程序成为可能:不再使用 cpack,而是可以调用 cmake --build . --target package 或 make package 或 ninja package。VS 生成器会创建一个大写的 PACKAGE 目标。
如果使用 Makefile 或 Ninja 生成器运行 CMake,则 include(CPack) 还会生成一个 package_source 目标。要构建源代码包,不再使用 cpack -G TGZ --config CPackSourceConfig.cmake,而是可以调用 cmake --build . --target package_source、make package_source 或 ninja package_source。
所有 CPack 生成器共有的变量¶
在 CMakeLists.txt 文件中包含此 CPack 模块之前,可以设置各种变量来自定义生成的安装程序。最常用的变量有:
- CPACK_PACKAGE_NAME¶
包(或应用程序)的名称。如果未指定,则默认为项目名称。
- CPACK_PACKAGE_VENDOR¶
包供应商的名称(例如 "Kitware")。默认值为 "Humanity"。
- 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>) 命令列出的那些。
在 4.2 版本更改: 该变量接受算法列表。
- CPACK_PROJECT_CONFIG_FILE¶
CPack 运行时的项目 CPack 配置文件。此文件在 cpack 运行时包含,每个生成器包含一次,在 CPack 将
CPACK_GENERATOR设置为实际正在使用的生成器之后。它允许在 cpack 运行时针对每个生成器设置CPACK_*变量。
- CPACK_RESOURCE_FILE_LICENSE¶
要嵌入到安装程序中的许可证。它通常由生成的安装程序在安装前向用户显示(对于图形化安装程序,通常带有明确的“接受”按钮)。此许可证文件不会添加到已安装的文件中,而是被 NSIS 等某些 CPack 生成器使用。如果您想使用 UTF-8 字符,该文件需要以带 BOM 的 UTF-8 编码。如果您想随项目一起安装许可证文件(可能是同一个文件),则必须在
CMakeLists.txt中添加适当的 CMakeinstall()命令。
- CPACK_RESOURCE_FILE_README¶
要嵌入到安装程序中的自述文件 (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、Inno Setup 和 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_COMPRESSION_LEVEL¶
Added in version 4.3.
在适用时(例如压缩安装程序包)选择要使用的压缩级别。
CPack 生成器(如 Debian 或 Archive)使用的一些压缩方法可以利用不同的压缩级别。接受的值范围为
0到9。如果您选择zstd压缩方法,您可以选择0到19之间的压缩级别,zip归档格式除外。默认情况下,
CPACK_COMPRESSION_LEVEL设置为0,它选择默认压缩级别。它是由归档库后端自动选择的,而不是由 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¶
指定要安装的项目的四个值的列表。这四个值是:构建目录、项目名称、项目组件、目录。如果省略,CPack 将构建一个安装所有内容的安装程序。
- CPACK_SYSTEM_NAME¶
系统名称,默认为
CMAKE_SYSTEM_NAME的值,但在 Windows 上它将是win32或win64。
- 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_DIR、CMAKE_CURRENT_BINARY_DIR和CMAKE_INSTALL_PREFIX(设置为暂存安装目录)。出于历史原因,单数形式CMAKE_INSTALL_SCRIPT作为替代变量受支持,但如果设置了CMAKE_INSTALL_SCRIPTS,其值将被忽略,并将发出警告。另请参阅
CPACK_PRE_BUILD_SCRIPTS和CPACK_POST_BUILD_SCRIPTS,它们可用于指定在打包过程后期执行的脚本。
- CPACK_PRE_BUILD_SCRIPTS¶
3.19 版本新增。
CPack 将要打包的文件安装到暂存目录之后,以及从这些文件制作包之前执行的 CMake 脚本列表。另请参阅
CPACK_INSTALL_SCRIPTS和CPACK_POST_BUILD_SCRIPTS。
- CPACK_POST_BUILD_SCRIPTS¶
3.19 版本新增。
CPack 生成结果包之后,以及将它们复制回构建目录之前执行的 CMake 脚本列表。另请参阅
CPACK_INSTALL_SCRIPTS、CPACK_PRE_BUILD_SCRIPTS和CPACK_PACKAGE_FILES。
- CPACK_PACKAGE_FILES¶
3.19 版本新增。
在暂存目录中创建的包文件列表,每个文件以完整的绝对路径提供。此变量由 CPack 在调用
CPACK_POST_BUILD_SCRIPTS中列出的构建后脚本之前填充。这是构建后脚本了解要操作的包文件集的首选方式。项目不应尝试自行设置此变量。
- CPACK_INSTALLED_DIRECTORIES¶
要安装的额外目录。
- CPACK_PACKAGE_INSTALL_REGISTRY_KEY¶
安装此项目时使用的注册表项。这仅由 Windows 安装程序使用。默认值基于安装目录。
- CPACK_CREATE_DESKTOP_LINKS¶
要创建的桌面链接列表。每个桌面链接都需要一个由
CPACK_PACKAGE_EXECUTABLES创建的相应开始菜单快捷方式。
- CPACK_BINARY_<GENNAME>¶
CPack 为二进制生成器生成的选项。
CPack.cmake模块生成(当未设置CPACK_GENERATOR时)一组 CMake 选项(参见 CMakeoption()命令),这些选项随后可用于选择构建package目标时或在没有-G选项的情况下运行cpack时要使用的 CPack 生成器。
- CPACK_READELF_EXECUTABLE¶
在 3.25 版本中新增。
指定 CPack 使用的
readelf可执行文件路径。默认值将取自CMAKE_READELF变量(如果已设置),该变量可能由 CMake 在启用语言时填充。如果未设置CMAKE_READELF,CPack 将在需要时使用find_program()来确定readelf路径。
- CPACK_OBJCOPY_EXECUTABLE¶
在 3.25 版本中新增。
指定 CPack 使用的
objcopy可执行文件路径。默认值将取自CMAKE_OBJCOPY变量(如果已设置),该变量可能由 CMake 在启用语言时填充。如果未设置CMAKE_OBJCOPY,CPack 将在需要时使用find_program()来确定objcopy路径。
- CPACK_OBJDUMP_EXECUTABLE¶
在 3.25 版本中新增。
指定 CPack 使用的
objdump可执行文件路径。默认值将取自CMAKE_OBJDUMP变量,该变量可能由 CMake 在启用语言时填充。如果未设置CMAKE_OBJDUMP,CPack 将在需要时使用find_program()来确定objdump路径。