CMake 3.28 发行说明

自 CMake 3.27 以来的更改包括以下内容。

新功能

语言

  • C++ 20 命名模块现已通过 Ninja GeneratorsVisual Studio Generators(适用于 VS 2022 及更新版本)支持,结合 MSVC 14.34 工具集(随 VS 17.4 提供)及更新版本、LLVM/Clang 16.0 及更新版本,以及 GCC 14(在 2023-09-20 的每日构建后)及更新版本。有关详细信息,请参阅 cmake-cxxmodules(7)

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

平台

预设

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

编译器

  • Cray Clang 编译器现已通过 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_LOCATION 的情况下使用 IMPORTED_IMPLIB 目标属性。这可以用于表示一个桩库(stub library),其位置不应被添加为链接它的依赖项的运行时搜索路径。

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

  • 增加了 XCODE_EMBED_RESOURCES 目标属性,用于告知 Xcode 生成器哪些目标应放入“Embed Resources”构建阶段。

模块

生成器表达式

CTest

已弃用和移除的功能

  • 根据策略 CMP0153,自 CMake 3.0 起已弃用的 exec_program() 命令已被移除。请改用 execute_process() 命令。

  • 已移除 Visual Studio 11 2012 生成器。

  • Visual Studio 12 2013 生成器现已弃用,并将在 CMake 的未来版本中移除。

  • 已弃用 IOS_INSTALL_COMBINED 目标属性和相应的 CMAKE_IOS_INSTALL_COMBINED 变量。它们的功能在 Apple Silicon 主机上没有意义。

  • 对于 Xcode 14 及更新版本,如果选择了 Legacy Build System,Xcode 生成器现在将发出致命错误。这些 Xcode 版本已放弃对 Legacy Build System 的支持,并期望项目设置为其当前 Build System。

其他更改

  • 使用 File Sets 的目标中的生成文件,默认情况下被视为私有。公共生成头文件必须使用文件集来指定。这允许 Ninja Generators 生成更高效的构建图。请参阅策略 CMP0154

  • find_library()find_path()find_file() 命令不再搜索从 PATH 环境变量派生的安装前缀。此行为在 CMake 3.3 中添加,以支持 Windows 上的 MSYS 和 MinGW (MSYSTEM) 开发环境,但它可能会搜索在 PATH 中碰巧存在的、但出于无关原因的非预期前缀。用户将一些 <prefix>/bin 目录仅出于工具目的保留在 PATH 中,不一定希望搜索相应的 <prefix>/lib<prefix>/include 目录。此行为在 CMake 3.6 中已恢复为非 Windows 平台。现在,它也已在 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

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

3.28.5

  • 此版本未对已记录的功能或接口进行任何更改。对 C++ 模块支持进行了一些实现更新。

3.28.6

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