CMake 3.28 发行说明

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

新特性

语言

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

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

平台

预设

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

编译器

  • 现在支持基于 Cray Clang 的编译器,使用 编译器 ID CrayClang

  • 现在支持 OrangeC 编译器,使用 编译器 ID OrangeC

命令

变量

属性

  • 在导入的共享库上,现在可以使用 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 目录。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

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