CMake 4.0 版本说明

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

新功能

基于文件的 API

  • cmake-file-api(7) "codemodel" 版本 2 的 version 字段已更新至 2.8。

  • cmake-file-api(7) "codemodel" 版本 2 的 "target" 对象添加了一个新的 debugger 字段。

命令行

命令

变量

属性

模块

生成器表达式

  • $<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 的用户,如果不在使用 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 缓存和环境变量的摘要。该摘要现在仅在通过 cmake --log-level 选项或 CMAKE_MESSAGE_LOG_LEVEL 缓存变量将消息日志级别设置为 VERBOSEDEBUGTRACE 时显示。

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

更新

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

4.0.1

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

4.0.2

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

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

4.0.3, 4.0.4

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

4.0.5

  • 当使用 Xcode 生成器为 macOS 构建时,如果 CMAKE_OSX_DEPLOYMENT_TARGET 再次默认为主机的 macOS 版本(如果它比 macOS SDK 版本旧),就像在 CMake 4.0 之前的版本中所做的那样。

  • execute_process() 命令在达到其 TIMEOUT 时会再次终止子进程。这在 CMake 3.29 中被意外回归。