CMake 4.0 发行说明

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

新功能

基于文件的 API

命令行

命令

变量

属性

模块

生成器表达式

  • $<PATH> 生成器表达式新增了 NATIVE_PATH 操作,用于将 CMake 路径转换为原生路径。

CTest

  • 在 Windows 上,ctest --interactive-debug-mode 选项现在默认在测试进程中启用 Windows 错误报告,允许它们创建调试弹出窗口和核心转储。这恢复了 CMake 3.11 在 libuv 更新使其成为可能后删除的行为。

CPack

已弃用和已删除的功能

其他更改

  • 在 macOS 上,使用 Ninja 生成器Makefile 生成器 时,如果在 /usr/bin 中找到编译器,则现在按原样使用它,不再映射到 Xcode 中相应的编译器。此映射由 CMake 3.2 引入,旨在允许构建树即使在 xcode-select 切换到不同的 Xcode 安装时也能继续使用其原始编译器。然而,Xcode 中的编译器无法在没有显式 -isysroot 标志的情况下使用,因此不适合传递给任意第三方构建系统。此外,映射行为可能会覆盖用户指定的编译器路径。因此,此行为已恢复。

  • 在针对 macOS 的构建中,CMAKE_OSX_SYSROOT 现在默认为空,将 macOS SDK 选择权交给编译器。为了通过编译器的 -isysroot 标志传递显式 macOS SDK,用户可以使用 -DCMAKE_OSX_SYSROOT=macosx 配置其构建树,或在其环境中 export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

    备注

    • macOS 中 /usr/bin 的编译器,当不带 -isysroot 调用时,会在系统 SDK 路径之前搜索 /usr/local/include 中的头文件,这与许多平台上的约定一致。macOS-x86_64 主机上安装了 Homebrew 在 /usr/local 中的用户,在不使用 Homebrew 工具构建时,应如上所述传递显式 SDK。

    • 某些 Clang 编译器没有默认的 macOS SDK 选择。对于这些编译器,如果 CMAKE_OSX_SYSROOT 为空,CMake 将自动传递 -isysrootxcrun --show-sdk-path 打印的 macOS SDK。

  • 在 Windows 上,项目代码中命名的文件路径(例如 CMakeLists.txt 中的路径)不再自动转换为其磁盘上的大小写。项目应使用其规范的大小写一致地拼写源文件路径,例如在调用 add_library()set_property(SOURCE)set_source_files_properties() 时。这与文件系统区分大小写的平台上的行为一致。

  • 在 AIX 上,SHARED 库目标现在默认生成共享库归档。参见策略 CMP0182

  • cmake --preset 命令现在默认不再输出预设的 CMake 缓存和环境变量摘要。该摘要现在仅在消息日志级别设置为 VERBOSEDEBUGTRACE 时显示,通过 cmake --log-level 选项或 CMAKE_MESSAGE_LOG_LEVEL 缓存变量。

  • 现在在 cmake.org 上提供了预编译的 SunOS sparc64x86_64 二进制文件。

更新

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

4.0.1

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

4.0.2

  • 当为 macOS 构建时,如果使用的 Clang 没有默认的 macOS SDK,并且 CMAKE_OSX_SYSROOT 为空,CMake 现在会自动传递 -isysrootxcrun --show-sdk-path 打印的 macOS SDK。这恢复了在 macOS 上无需手动设置 CMAKE_OSX_SYSROOT 即可使用 LLVM/Clang 的支持,该支持在 CMake 4.0.0 移除默认值后被破坏。

  • DEBUGGER_WORKING_DIRECTORY 目标属性现在被 Xcode 生成器用作 XCODE_SCHEME_WORKING_DIRECTORY 目标属性的备用。

4.0.3

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