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”。请参阅政策:policy:CMP0129

基于文件的 API

  • cmake-file-api(7) “代码模型”版本 2 version 字段已更新为 2.4

  • cmake-file-api(7) "codemodel" version 2 directory object installers 字段获得了新的 fileSet 安装程序类型。

命令

  • 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 模块的 ExternalProject_Add() 命令获得了对 USES_TERMINAL_PATCH 选项的支持,以赋予补丁步骤独占终端访问权限。

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

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

  • FindGTest 模块现在为 GMock 提供目标(如果找到的话)。

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

C测试

包装

弃用和删除的功能

  • cmake(1) 现在在指定多个源路径时发出警告,如在 cmake -S src1 src2 中。这从未被正式记录或支持,但旧版本意外地接受了多个源路径并使用了最后指定的路径。更新脚本以避免传递多个源路径参数。

  • cpack(1) 未记录的 OSXX11 生成器已被删除。

  • CPack.distribution.dist.in 模板中使用的先前未记录的 CPACK_PACKAGEMAKER_CHOICES 变量已被新的 CPACK_APPLE_PKG_INSTALLER_CONTENT 变量替换。这只会影响那些提供自己的自定义“CPack.distribution.dist.in”模板文件的项目,但仍然依赖于“CPACK_PACKAGEMAKER_CHOICES”的设置。这些自定义模板文件应该更新为使用“CPACK_APPLE_PKG_INSTALLER_CONTENT”,或者完全定义所有模板文件的内容而不依赖于任何一个变量的替换。

其他变化

  • CPack DragNDrop Generator 不再附加 CPACK_RESOURCE_FILE_LICENSE 作为生成的 .dmg 中的许可协议,除非由 CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE 选项明确激活。在 CMake 项目中, CPack 模块默认启用该选项以实现兼容性。

  • CUDA 目标现在可以同时启用 CUDA_SEPARABLE_COMPILATIONCUDA_PTX_COMPILATION

  • CUDA 编译器检测现在:

    • 如果需要,在无法计算默认架构的所有情况下都会发出错误(请参阅:policy:CMP0104),

    • 在 Clang 上为 CMAKE_CUDA_ARCHITECTURES 处理 OFF

    • 支持多个默认架构的理论案例,并且

    • 尝试检测无效架构并发出错误。

  • 带有 Clang 的 CUDA 现在实现策略:policy:CMP0105 和:genex:$<DEVICE_LINK:...> 和:genex:$<HOST_LINK:...> 生成器表达式。

  • define_property() 命令的 BRIEF_DOCSFULL_DOCS 参数现在是可选的。

  • ccmake(1) 现在可以在从源代码构建 CMake 时在 Windows 上启用。这是实验性的,因此不包含在官方发行版中。

更新

自 CMake 3.23.0 以来所做的更改包括以下内容。

3.23.1

  • CMake 3.23.0 中添加的 target_sources() FILE_SET 功能尚未在 Apple FRAMEWORK 目标中正确放置头文件。在 CMake 的未来版本中等待进一步的工作,现在在 Apple 平台上向此类目标添加类型为“HEADERS”的“FILE_SET”是错误的。

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

3.23.2

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

3.23.3、3.23.4、3.23.5

  • 这些版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。