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 安装程序类型以及相关的 fileSetNamefileSetTypefileSetDirectoriesfileSetTarget 字段。

命令

  • 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.distribution.dist.in 模板文件中使用的之前未文档化的 CPACK_PACKAGEMAKER_CHOICES 变量已被新的 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 平台上的此类目标添加 HEADERS 类型的 FILE_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

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