CMake 3.28 发行说明

自 CMake 3.27 起所做的更改包括以下内容。

新功能

语言

  • 现在,C++ 20 命名模块受 Ninja 生成器 和针对较新版本的 VS 2022、结合 MSVC 14.34 工具集(随 VS 17.4 提供)以及较新版本的 LLVM/Clang 16.0 和较新版本的 GCC 14(在 2023-09-20 日常更新之后)的 Visual Studio 生成器 支持。请参阅 cmake-cxxmodules(7) 了解详情。

  • HIP 语言代码现在可以使用 NVIDIA CUDA 编译器 (NVCC) 编译 NVIDIA GPU。请参阅 CMAKE_HIP_PLATFORM 变量。

平台

预设

  • cmake-presets(7) 文件现支持模式版本 8。它增加了对 $schema 字段的支持。

编译器

  • Cray Clang-based 编译器现受 compiler id CrayClang 支持。

  • OrangeC 编译器现受 compiler id OrangeC 支持。

命令

  • add_custom_command()add_custom_target() 命令获得了一个 JOB_SERVER_AWARE 选项。

  • cmake_host_system_information() 命令获得了一个 MSYSTEM_PREFIX 查询,用于在 Windows 主机上查询 MSYS 或 MinGW 开发环境的安装前缀。

  • set_property() 命令的 TEST 模式获得了一个 DIRECTORY 选项,用于设置其他目录中的测试属性。

  • set_tests_properties() 命令获得了一个 DIRECTORY 选项,用于设置其他目录中的测试属性。

  • get_property() 命令的 TEST 模式获得了一个 DIRECTORY 选项,用于获取其他目录中的测试属性。

  • 命令 get_test_property() 增加了一个 DIRECTORY 选项,用于获取其他目录中测试的属性。

变量

属性

  • 在导入的共享库上,目标属性 IMPORTED_IMPLIB 现在可以在没有任何 IMPORTED_LOCATION 的情况下使用。这可用于表示一个存根库,其位置不应作为运行时搜索路径添加到链接它的依赖项中。

  • macOS 框架的 IMPORTED_LOCATION 属性现在可以是 .framework 文件夹本身的路径。

  • 目标属性 XCODE_EMBED_RESOURCES 已被添加用于告诉 Xcode 生成器将哪些目标放入 Embed Resources 构建阶段。

模块

生成器表达式

CTest

弃用和删除的功能

其他更改

  • 在使用文件集的目标中生成的代码现在默认视为私有。必须使用文件集指定生成的公开标头。这允许Ninja 生成器生成更高效的构建图。请参阅策略CMP0154

  • find_library()find_path()find_file()命令不再在源自PATH环境变量的安装前缀中搜索。此行为在 CMake 3.3 中添加,以支持 Windows 上的 MSYS 和 MinGW (MSYSTEM) 开发环境,但它可能会搜索出于无关原因碰巧位于PATH中的不需要的前缀。将某些<prefix>/bin目录单独用于其工具的PATH的用户不一定希望搜索相应的<prefix>/lib<prefix>/include目录。非 Windows 平台的行为已由 CMake 3.6 恢复。现在它也在 Windows 平台上恢复了。

    可以使用分隔符为分号的列表设置CMAKE_PREFIX_PATH环境变量,该列表列出了要搜索的前缀。

  • 在 Windows 上的MSYSTEM环境中使用 MinGW 工具时,$MSYSTEM_PREFIX/local$MSYSTEM_PREFIX前缀现在已添加到CMAKE_SYSTEM_PREFIX_PATH中。

  • cmake.org 上提供的预编译 Linux x86_64 二进制文件现在需要 GLIBC 2.17 或更高版本。

更新

自 CMake 3.28.0 以来做出的更改包括以下内容。

3.28.1、3.28.2、3.28.3

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

3.28.4

  • 已针对 xrosxrsimulator SDK 的 Xcode 15.2 正式版本更新了 Apple visionOS 支持。

3.28.5

  • 此版本未对记录的要素或界面进行任何更改。对 C++ 模块支持进行了一些实现更新。

3.28.6

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