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 输出。
语言¶
Compile Features功能现在可以识别 C++26,并定义了``cxx_std_26`` 元特征。 C++26 编译器模式也可以通过 CXX_STANDARD、CUDA_STANDARD、HIP_STANDARD 或 OBJCXX_STANDARD 目标属性指定。CUDA语言支持现在包括使用nvcc时的设备链接时间优化。 CMAKE_INTERPROCEDURAL_OPTIMIZATION 变量和关联的 INTERPROCEDURAL_OPTIMIZATION 目标属性将激活设备 LTO。
命令行¶
A
cmake --workflow --preset模式被添加到通过单个命令驱动配置、构建、测试和打包操作的序列。cmake -E capabilities命令获得了一个新的tls字段,指示是否启用了 TLS。cmake -E env命令行工具获得了一个--modify标志以支持ENVIRONMENT_MODIFICATION操作。cmake --debug-trycompile选项现在打印日志消息,报告每个尝试编译检查完成的目录。
编译器¶
添加了对 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选项,可以将变量传播到控制返回的范围。请参阅政策:policy: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 的编译器选择调试信息格式。请参阅政策:policy: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设置中。添加了
XCODE_SCHEME_LAUNCH_MODE变量和相应的XCODE_SCHEME_LAUNCH_MODE目标属性来告诉Xcode生成器将什么放入方案的“启动”模式设置中。CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION变量和相应的XCODE_SCHEME_LAUNCH_CONFIGURATION目标属性被添加来告诉Xcode生成器在方案的启动操作中放置什么配置。
特性¶
添加了
EXPORT_NO_SYSTEM目标属性以指定:command:install(EXPORT) 和export()命令将生成具有SYSTEM属性OFF的导入目标。添加了
SYSTEM目标属性以指定目标是否应被视为系统库(即,其包含目录在编译消费者时自动为SYSTEM)。如果未设置,则默认为以前的行为:对导入的目标打开,对其他目标关闭。
模块¶
FetchContent模块的FetchContent_Declare()命令获得了一个SYSTEM选项,它在FetchContent_MakeAvailable()创建的子目录上设置SYSTEM目录属性。FindCUDAToolkit模块现在为 CUDA 10.0+ 的 nvtx3 提供了一个目标,它取代了 nvToolsExt。如果项目需要 CMake 3.25 并使用 CUDA 10.0+,则在使用nvToolsExt时会发出弃用警告。FindDoxygen模块的版本处理得到改进:如果需要,现在将考虑多个候选安装以满足版本限制。以前,只会考虑遇到的第一个。
支持版本范围。
现在可以容忍 Doxygen 报告的版本格式的变化(例如,尾随的 git 提交哈希)。
FindOpenAL模块现在提供了一个导入的目标。添加了
FindOpenSP模块以查找 OpenSP 库。FindVulkan模块获得了对新组件的支持:dxcDirectX 着色器编译器。
大众Volk 开源 vulkan 元加载器。
包装¶
CPack Archive Generator获得了一个新的CPACK_ARCHIVE_FILE_EXTENSION变量来控制包文件扩展名。CPack NSIS Generator 获得了两个新变量 CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS 和 CPACK_NSIS_EXECUTABLE_POST_ARGUMENTS 为 nsis 可执行文件调用提供参数。
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)添加到库搜索路径。请参阅政策:policy:CMP0142。
更新¶
自 CMake 3.25.0 以来所做的更改包括以下内容。
3.25.1¶
在 Windows 上,当以 MSVC ABI 为目标时,
find_library()命令不再接受.a文件名。此行为已添加到 CMake 3.25.0 中,但由于在我们之前没有找到 GNU-ABI 库的情况下已恢复。
3.25.2¶
NVCC 12.0 及更高版本现在支持 CUDA 语言级别 20(对应于 C++20)。
在 Windows 上,不再选择 Intel oneAPI 2023.0 及更高版本现在提供的
icpx编译器,因为它的 GNU-like 命令行尚未被 CMake 支持。
3.25.3¶
此版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。