CMake 4.1 发布说明

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

新功能

基于文件的 API

生成器

命令行

  • 当使用 Xcode 生成器时,cmake --build 命令行工具现在可以检测到第三方工具何时将生成的 .xcodeproj 文件包装在 .xcworkspace 文件中,并改为通过工作区驱动构建。

配置日志

编译器

  • 现在支持 Wind River Systems 的 Diab 编译器,版本 5.9.x+,使用 compiler id Diab,支持语言 ASMCCXX

命令

  • 现在可以调用 add_dependencies() 命令而无需指定依赖项。

  • 现在 cmake_pkg_config() 命令支持 IMPORTPOPULATE 子命令,用于将 CMake 目标与基于 pkg-config 的依赖项进行接口集成。

  • 现在 project() 命令对 COMPAT_VERSION 关键字提供了实验性支持,该支持由 CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO 启用。

变量

环境变量

属性

模块

正则表达式

CTest

CPack

已弃用和移除的功能

其他更改

  • ExternalProject 模块不再检查 URL 归档文件扩展名。现在允许 cmake -E tar 提取的任何归档类型。

  • 现在,在交叉编译模式下,FindPython3FindPython2FindPython 模块会强制执行工件在交叉编译模式下的不混用。这可以防止混合主机和目标工件。请参阅策略 CMP0190

  • 当安装到特殊前缀时,GNUInstallDirs 模块现在更倾向于将 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR 默认设置为绝对路径。请参阅策略 CMP0192

  • GNUInstallDirs 模块现在将安装前缀为 /CMAKE_INSTALL_* 变量缓存,并在其前面加上 usr/。请参阅策略 CMP0193

  • 现在 install(TARGETS) 命令不再忽略在调用时尚未定义的 `file set`。现在 target_sources(FILE_SET)install(TARGETS) 的顺序不再具有语义相关性。

  • 现在启用 ASM 不会意外地使用 MSVCcl C 编译器作为汇编器。请参阅策略 CMP0194

  • MSVC 链接器 -machine: 标志不再添加到 CMAKE_*_LINKER_FLAGS 变量中。请参阅策略 CMP0197

  • 现在 TARGET_PROPERTY 生成器表达式会传递性地计算 LINK_LIBRARIESINTERFACE_LINK_LIBRARIES 目标属性。请参阅策略 CMP0189

更新

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

4.1.1

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

4.1.2

  • 现在,当评估生成器表达式时,file(GENERATE) 命令在每次调用时使用策略 CMP0189 的值。以前,它使用目录的 CMakeLists.txt 结束时的值,就像所有其他生成器表达式评估一样。

4.1.3

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

  • 当其 TIMEOUT 超时时,execute_process() 命令再次终止子进程。这在 CMake 3.29 中意外回归。