CMake 3.25 发行说明

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

新功能

预设

  • 已将 cmake-presets(7) 模式版本提高到 6

  • cmake-presets(7) 格式现在支持 packagePresets 字段,用于指定 cpack --preset 的预设。

  • cmake-presets(7) 格式现在支持 workflowPresets 字段,用于指定 cmake --workflow 的预设。

  • cmake-presets(7) 格式现在支持 outputJUnitFile 字段,用于在测试预设中指定 JUnit 输出。

语言

命令行

编译器

命令

  • add_subdirectory() 命令新增了 SYSTEM 选项,用于在子目录中启用 SYSTEM 目录属性。

  • 添加了 block()endblock() 命令,用于管理特定作用域(策略或变量)的命令块。

  • cmake_language() 命令新增了一个 GET_MESSAGE_LOG_LEVEL 子命令。可用于查询当前消息日志级别。

  • find_file()find_path()find_library()find_program() 命令新增了 VALIDATOR 选项,用于指定一个函数来验证每个候选项。

  • find_package() 命令在搜索包配置文件时,现在会考虑 <prefix>/<name>*/(cmake|CMake)/<name>*/ 形式的路径。

  • return() 命令新增了 PROPAGATE 选项,用于将变量传播到控制返回的作用域。请参阅策略 CMP0140

  • try_compile()try_run() 命令新增了签名,这些签名更一致地使用关键字分派,并且不需要指定二进制目录。此外,这些签名使用每个调用唯一的目录,这允许在 cmake --debug-trycompile 时保留多个输出。

  • try_compile()try_run() 命令新增了 NO_CACHE 选项,用于将结果存储在普通变量中。

  • try_run() 命令新增了 RUN_OUTPUT_STDOUT_VARIABLERUN_OUTPUT_STDERR_VARIABLE 选项,用于分别捕获标准输出和标准错误,以及编译程序的输出。

变量

属性

  • <LANG>_COMPILER_LAUNCHER 目标属性现在支持 生成器表达式

  • 添加了 EXPORT_NO_SYSTEM 目标属性,用于指定 install(EXPORT)export() 命令将生成一个导入的目标,其 SYSTEM 属性为 OFF

  • 添加了 SYSTEM 目标属性,用于指定一个目标是否应被视为系统库(即,当编译使用者时,其包含目录自动为 SYSTEM)。如果未设置,则默认行为与以前相同:导入的目标为 on,其他目标为 off。

  • 添加了 SYSTEM 目录属性,用于初始化在该目录中创建的目标的 SYSTEM 目标属性。

模块

  • module FetchContentFetchContent_Declare() 命令新增了 SYSTEM 选项,该选项在 FetchContent_MakeAvailable() 创建的子目录上设置 SYSTEM 目录属性。

  • module FindCUDAToolkit 现在为 CUDA 10.0+ 的 nvtx3 提供了一个目标,它取代了 nvToolsExt。当使用 nvToolsExt 且项目要求 CMake 3.25 和 CUDA 10.0+ 时,会发出弃用警告。

  • module FindDoxygen 的版本处理已得到改进

    • 现在将考虑多个候选安装,以满足版本约束。以前,只考虑遇到的第一个。

    • 支持版本范围。

    • 现在可以容忍 Doxygen 报告的版本格式的差异(例如,尾随的 git commit hash)。

  • module FindOpenAL 现在提供了一个导入的目标。

  • module FindOpenSP 被添加用于查找 OpenSP 库。

  • module FindVulkan 增加了对新组件的支持

    dxc

    DirectX 着色器编译器。

    volk

    Volk 开源 vulkan 元加载器。

CPack

已弃用和已删除的功能

其他更改

  • 现在可以使用环境变量 SSL_CERT_FILESSL_CERT_DIR 来覆盖 TLS/SSL 操作中查找证书颁发机构的位置。

  • 如果 <LANG>_CLANG_TIDY 包含 -p 参数,则完整的编译器命令行不再附加在 -- 之后。

  • Xcode 生成器不再将每种配置的后缀 $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 添加到库搜索路径中。请参阅策略 CMP0142

更新

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

3.25.1

  • 在 Windows 上,当针对 MSVC ABI 时,find_library() 命令不再接受 .a 文件名。此行为在 CMake 3.25.0 中添加,但已被撤销,因为在之前未曾遇到过 GNU-ABI 库的情况。

3.25.2

  • CUDA 语言级别 20(对应 C++20)现在与 NVCC 12.0 及以上版本兼容。

  • 在 Windows 上,Intel oneAPI 2023.0 及以上版本提供的 icpx 编译器不再被选中,因为其类 GNU 的命令行尚未被 CMake 支持。

3.25.3

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