CMake 3.23 版本说明

自 CMake 3.22 以来的变更包括以下内容。

新功能

预设

  • cmake-presets(7) 文件现在支持模式版本 4

  • cmake-presets(7) 文件现在有一个可选的 include 字段,允许文件包含其他文件。

  • cmake-presets(7) 文件现在支持 ${fileDir} 宏,它包含预设文件所在的目录。

  • cmake-presets(7) 增加了对在构建预设中指定 resolvePackageReferences 命令行选项的支持,以控制从外部包管理器恢复包引用的行为。目前,这仅由 Visual Studio 生成器支持,以支持从 NuGet 恢复包。其他生成器将忽略此选项。

生成器

命令行

编译器

  • 现在支持基于 LLVM 的 IBM Open XL C/C++ 编译器,编译器 ID 为 IBMClang

  • 现在支持 MCST LCC 编译器,编译器 ID 为 LCC。请参阅策略 CMP0129

基于文件的 API

  • cmake-file-api(7) 的 "codemodel" 版本 2 的 version 字段已更新至 2.4

  • cmake-file-api(7) 的 "codemodel" 版本 2 的 directory 对象 installers 字段增加了一个新的 fileSet 安装程序类型以及相关的 fileSetNamefileSetTypefileSetDirectoriesfileSetTarget 字段。

命令

  • 在创建目标时,define_property() 命令增加了一个新的 INITIALIZE_FROM_VARIABLE 选项,用于使目标属性从变量进行初始化。

  • 目标安装命令 install(TARGETS) 增加了新的 FILE_SET 参数,可用于安装与目标关联的头文件集。

  • string(TIMESTAMP)file(TIMESTAMP) 命令现在支持微秒的 %f 说明符。

  • target_sources() 命令增加了新的 FILE_SET 模式,可用于将头文件添加为目标的头文件仅源文件。

变量

属性

模块

  • CheckPIESupported 模块现在支持 OBJCOBJCXXCUDAHIP 语言。它还遵循 CMAKE_SYSROOTCMAKE_OSX_SYSROOT

  • ExternalProject_Add() 命令的 ExternalProject 模块获得了对 USES_TERMINAL_PATCH 选项的支持,该选项允许 patch 步骤独占终端访问。

  • FindCUDAToolkit 模块现在提供了一个 libcufft_static_nocallback 的目标,如果找到的话。

  • FindGLUT 模块现在提供 GLUT_INCLUDE_DIRS 结果变量,以符合 cmake-developer(7) 手册中记录的命名约定。这取代了旧的 GLUT_INCLUDE_DIR 变量。

  • FindGTest 模块现在提供了一个 GMock 的目标,如果找到的话。

  • FindVulkan 模块现在提供一个 Vulkan_VERSION 结果变量,报告版本号。

CTest

CPack

已弃用和移除的功能

  • cmake(1) 现在会警告指定多个源路径的情况,例如 cmake -S src1 src2。这从未被正式文档化或支持,但旧版本意外地接受了多个源路径并使用了指定的最后一个路径。请更新脚本以避免传递多个源路径参数。

  • 已移除 cpack(1) 未文档化的 OSXX11 生成器。

  • 之前未文档化的、用于 CPack.distribution.dist.in 模板的 CPACK_PACKAGEMAKER_CHOICES 变量已被 CMake 3.23.0 中新引入的 CPACK_APPLE_PKG_INSTALLER_CONTENT 变量替换。这会影响提供自己的自定义 CPack.distribution.dist.in 模板文件但仍依赖于定义 CPACK_PACKAGEMAKER_CHOICES 变量的项目。应更新这些自定义模板文件以使用 CPACK_APPLE_PKG_INSTALLER_CONTENT,或者在不依赖于这两个变量替换的情况下完全定义模板文件的所有内容。

其他更改

更新

自 CMake 3.23.0 以来的变更包括以下内容。

3.23.1

  • CMake 3.23.0 中添加的 target_sources() FILE_SET 功能尚未在 Apple FRAMEWORK 目标中正确放置头文件。在 CMake 的未来版本中进行进一步工作之前,现在禁止在 Apple 平台上将此类目标添加类型为 HEADERSFILE_SET

  • CMake 3.23.0 中添加的目标属性 HEADER_SETSINTERFACE_HEADER_SETS 现在是 target_sources() 命令创建的头文件集的只读记录。

3.23.2

  • CMake 3.23.0 中用于 CPack.distribution.dist.in 模板的 CPACK_PACKAGEMAKER_CHOICES 变量被新的 CPACK_APPLE_PKG_INSTALLER_CONTENT 变量替换。这破坏了提供自己的模板文件但仍期望 CPACK_PACKAGEMAKER_CHOICES 变量被定义的项目。旧的 CPACK_PACKAGEMAKER_CHOICES 变量现在也设置为与之前相同的内容,但已正式弃用。

3.23.3, 3.23.4, 3.23.5

  • 这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。