CMake 3.23 发行说明

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

新特性

预设

  • cmake-presets(7) 文件现在支持 schema 版本 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 安装程序类型。

命令

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

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

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

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

变量

属性

模块

CTest

CPack

已弃用和移除的功能

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

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

  • 先前未文档化的 CPACK_PACKAGEMAKER_CHOICES 变量(在 CPack.distribution.dist.in 模板中使用)已被新的 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 未来版本中进行进一步工作之前,现在将类型为 HEADERSFILE_SET 添加到 Apple 平台上的此类目标是错误的。

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

3.23.2

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

3.23.3、3.23.4、3.23.5

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