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 输出。
语言¶
现在可以通过
CXX_STANDARD、CUDA_STANDARD、HIP_STANDARD或OBJCXX_STANDARD目标属性来指定 C++26 编译器模式。使用
nvcc时,CUDA语言支持现在包括设备链接时优化。CMAKE_INTERPROCEDURAL_OPTIMIZATION变量和相关的INTERPROCEDURAL_OPTIMIZATION目标属性将激活设备 LTO。
命令行¶
添加了
cmake --workflow --preset模式,通过单个命令驱动配置、构建、测试和打包操作的序列。cmake -E capabilities命令新增了一个tls字段,用于指示 TLS 是否已启用。cmake -E env命令行工具新增了--modify标志,以支持ENVIRONMENT_MODIFICATION操作。cmake --debug-trycompile选项现在会打印日志消息,报告每个 try-compile 检查执行的目录。
编译器¶
添加了对 Tasking 编译器工具集(SmartCode, TriCore, Standalone: ARM, MCS, 8051)的支持,编译器 ID 为
Tasking。请参阅CMAKE_TASKING_TOOLSET变量。
命令¶
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_VARIABLE和RUN_OUTPUT_STDERR_VARIABLE选项,用于分别捕获标准输出和标准错误,以及编译程序的输出。
变量¶
当目标或主机系统分别为 BSD 时,
BSD和CMAKE_HOST_BSD变量现在设置为字符串值。当目标或主机系统分别为 Linux 时,
LINUX和CMAKE_HOST_LINUX变量现在设置为 true。引入了
CMAKE_MSVC_DEBUG_INFORMATION_FORMAT变量和MSVC_DEBUG_INFORMATION_FORMAT目标属性,用于为以 MSVC ABI 为目标的编译器选择调试信息格式。请参阅策略CMP0141。添加了
CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION变量和对应的XCODE_SCHEME_ENABLE_GPU_API_VALIDATION目标属性,用于告知Xcode生成器在方案的Metal: API Validation设置中放入什么。添加了
CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION变量和对应的XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION目标属性,用于告知Xcode生成器在方案的Metal: Shader Validation设置中放入什么。添加了
CMAKE_XCODE_SCHEME_LAUNCH_MODE变量和对应的XCODE_SCHEME_LAUNCH_MODE目标属性,用于告知Xcode生成器在方案的“启动”模式设置中放入什么。添加了
CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION变量和对应的XCODE_SCHEME_LAUNCH_CONFIGURATION目标属性,用于告知Xcode生成器在方案的启动操作中放入什么配置。
属性¶
<LANG>_COMPILER_LAUNCHER目标属性现在支持生成器表达式。添加了
EXPORT_NO_SYSTEM目标属性,用于指定install(EXPORT)和export()命令将生成一个导入的目标,其SYSTEM属性为OFF。添加了
SYSTEM目标属性,用于指定一个目标是否应被视为系统库(即,当编译使用者时,其包含目录自动为SYSTEM)。如果未设置,则默认行为与以前相同:导入的目标为 on,其他目标为 off。
模块¶
module
FetchContent的FetchContent_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增加了对新组件的支持dxcDirectX 着色器编译器。
volkVolk 开源 vulkan 元加载器。
CPack¶
CPack Archive Generator新增了CPACK_ARCHIVE_FILE_EXTENSION变量,用于控制包文件名扩展。CPack NSIS Generator新增了两个变量CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS和CPACK_NSIS_EXECUTABLE_POST_ARGUMENTS,用于提供 nsis 可执行文件调用的参数。module
CPack新增了CPACK_READELF_EXECUTABLE、CPACK_OBJCOPY_EXECUTABLE和CPACK_OBJDUMP_EXECUTABLE变量,用于控制cpack(1)使用的 binutils 的位置。
已弃用和已删除的功能¶
IMPORTED_NO_SYSTEM目标属性已被弃用,取而代之的是SYSTEM和EXPORT_NO_SYSTEM。已移除
Visual Studio 10 2010生成器。Visual Studio 11 2012生成器现已弃用,将在 CMake 的未来版本中移除。
其他更改¶
现在可以使用环境变量
SSL_CERT_FILE和SSL_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¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。