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 上类似 GNU 的 LLVM/Clang 前端 (clang++) 现在可以用于编译 CUDA 语言源文件。

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

  • 现在支持基于 TI Clang 的编译器,其 compiler idTIClang

命令

  • add_custom_command(TARGET) 签名现在支持通过 别名目标 添加构建事件。

  • 添加了 cmake_language(EXIT) 子命令,用于终止带有指定退出代码的 cmake -P 脚本。

  • 添加了 export(SETUP) 子命令来配置导出集。 它的 TARGET 选项的 XCFRAMEWORK_LOCATION 设置指定了可以替代已安装目标的 .xcframework 的位置。

  • if() 命令新增了 IS_READABLEIS_WRITABLEIS_EXECUTABLE 测试,用于检查文件或目录权限。

  • try_compile()try_run() 命令新增了 LINKER_LANGUAGE 选项,用于在生成的测试项目中指定 LINKER_LANGUAGE 目标属性。

变量

属性

模块

CTest

  • ctest(1) 新增了 --http-header 选项,用于在提交到 CDash 时添加自定义标头。

  • ctest(1) 新增了 --tests-from-file--exclude-from-file 选项,用于运行或排除在文件中命名的测试。

  • ctest(1) 现在支持 POSIX 系统上的 作业服务器集成

  • 现在可以不带值地给出 ctest -j 选项,以让 ctest 选择默认的并行级别,或者使用 0 让 ctest 使用无限制的并行性。 相应的 CTEST_PARALLEL_LEVEL 环境变量,如果设置为空字符串,现在等同于不带值传递 -j

  • The ctest_test() 命令新增了 INCLUDE_FROM_FILEEXCLUDE_FROM_FILE 选项,用于运行或排除在文件中命名的测试。

CPack

其他更改

  • CMake 学会了根据链接器功能对链接行上的库进行去重。 请参阅策略 CMP0156

  • add_test() 命令现在仅在交叉编译时才遵守 CMAKE_CROSSCOMPILING_EMULATOR。 请参阅策略 CMP0158

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

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

  • NinjaNMake Makefiles 生成器现在为系统 include 使用 -external:I 标志,当使用版本 2021.4 及更高版本的 IntelLLVM 时。 -external:W0 标志也用于版本 2022.2 及更高版本。

  • 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 生成器CPACK_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、3.29.9

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