CMake 3.29 发行说明

自 CMake 3.28 以来的更改包括:

新功能

命令行

  • cmake(1) -E cat 现在可以将输入传递给 - 参数以打印标准输入。

生成器

基于文件的 API

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

  • cmake-file-api(7)“codemodel”版本 2 的“target”对象获取了一个新的“launchers”字段。

编译器

  • Windows 上的 LLVM/Clang GNU 类似前端 (clang++) 现在可以用来编译 CUDA 语言源。

  • 面向 Windows 上的 GNU ABI 的编译器(MinGW)现在可以用来编译 Objective C (OBJC) 和 Objective C++ (OBJCXX)。包括 GNU 编译器 (gccg++) 和 LLVM/Clang GNU 类似前端(clangclang++)。

  • TI Clang 编译器现在具有 compiler id TIClang

命令

变量

属性

模块

CTest

CPack

其他更改

  • CMake学会了根据链接器功能在链接行上对库进行重复数据删除。请参阅策略CMP0156

  • add_test()命令现在只会在交叉编译时遵从CMAKE_CROSSCOMPILING_EMULATOR。请参阅策略CMP0158

  • 在 Windows 上,以 MSVC ABI 为目标时,find_library()命令现在在首先考虑.lib后接受.a文件名。这与以 GNU ABI 为目标时的现有行为是对称的,在 GNU ABI 中,该命令在首先考虑.a后接受.lib文件名。

  • 在 Windows 上,以 MSVC ABI 为目标时,find_library()命令现在在.lib之前考虑.dll.lib文件名。这是 Rust 工具链为 MSVC ABI 创建的 DLL 导入库的默认后缀。

  • 从 2021.4 版本开始,NinjaNMake Makefiles生成器现在使用-external:I标志作为系统包含,当时使用的是 2021.4 版本的 IntelLLVM。从 2022.2 版本开始,-external:W0标志也会被使用。

  • create_test_sourcelist()命令现在向生成的驱动程序源文件提供一个完整路径。

  • CPACK_PRODUCTBUILD_DOMAINS变量现在默认为 true。请参阅策略CMP0161

更新

自 CMake 3.29.0 以来做出的更改包括以下内容。

3.29.1

3.29.2、3.29.3、3.29.4

  • 这些版本未更改已记录的功能或接口。已执行一些实现更新来支持生态系统变更和/或修复回归。

3.29.5

  • CPack WIX GeneratorCPACK_WIX_INSTALL_SCOPE 变量(3.29 中新增)现在默认为 NONE。这恢复了与 3.28 及更低版本的兼容性:如果没有自定义 WiX 模板,它将生成仅为当前用户创建开始菜单项和卸载项的安装程序,即使它们是为所有用户安装的。

    在 3.29.0 到 3.29.4 中,CPACK_WIX_INSTALL_SCOPE 默认为 perMachine。这创建了默认情况下为所有用户创建开始菜单和卸载项的 MSI 安装程序。虽然此行为本身更好,但这些安装程序不能清楚地取代由 3.28 及更低版本生产的 MSI 安装程序创建的现有安装。3.29.5 恢复了此默认值以保持兼容性。项目可以通过设置 CPACK_WIX_INSTALL_SCOPE 来按自己的时间表过渡到 perMachine

3.29.6、3.29.7、3.29.8

  • 这些版本未更改已记录的功能或接口。已执行一些实现更新来支持生态系统变更和/或修复回归。