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 Compiler (NVCC) 为 NVIDIA GPU 编译 HIP 语言代码。请参阅 CMAKE_HIP_PLATFORM 变量。

平台

预设

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

编译器

  • 现在支持 Cray Clang 编译器,其 compiler idCrayClang

  • 现在支持 OrangeC 编译器,其 compiler idOrangeC

命令

变量

属性

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

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

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

模块

生成器表达式

CTest

已弃用和移除的功能

其他更改

  • 使用 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 支持已更新,以支持 Xcode 15.2 官方发布的 xrosxrsimulator SDK。

3.28.5

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

3.28.6

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