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 编译器模式。CUDA
语言支持现在包括使用nvcc
时的设备链接时优化。CMAKE_INTERPROCEDURAL_OPTIMIZATION
变量和相关的INTERPROCEDURAL_OPTIMIZATION
目标属性将激活设备 LTO。
命令行¶
添加了
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>*/
形式的路径。try_compile()
和try_run()
命令新增了签名,这些签名更一致地使用关键字调度,并且不需要指定二进制目录。此外,这些签名为每次调用使用唯一的目录,这允许在使用cmake --debug-trycompile
时保留多个输出。try_compile()
和try_run()
命令新增了NO_CACHE
选项,用于将结果存储在普通变量中。try_run()
命令新增了RUN_OUTPUT_STDOUT_VARIABLE
和RUN_OUTPUT_STDERR_VARIABLE
选项,用于从已编译程序的输出中分别捕获 stdout 和 stderr。
变量¶
当目标系统或主机系统分别为 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
生成器在 scheme 的Metal: API Validation
设置中放置什么。添加了
CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
变量和相应的XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
目标属性,以告知Xcode
生成器在 scheme 的Metal: Shader Validation
设置中放置什么。添加了
CMAKE_XCODE_SCHEME_LAUNCH_MODE
变量和相应的XCODE_SCHEME_LAUNCH_MODE
目标属性,以告知Xcode
生成器在 scheme 的“Launch”模式设置中放置什么。添加了
CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
变量和相应的XCODE_SCHEME_LAUNCH_CONFIGURATION
目标属性,以告知Xcode
生成器在 scheme 的 Launch 操作中放置什么配置。
属性¶
<LANG>_COMPILER_LAUNCHER
目标属性现在支持生成器表达式
。添加了
EXPORT_NO_SYSTEM
目标属性,用于指定install(EXPORT)
和export()
命令将生成SYSTEM
属性为OFF
的导入目标。添加了
SYSTEM
目标属性,用于指定是否应将目标视为系统库(即,其包含目录在编译使用者时自动为SYSTEM
)。如果未设置,则默认行为与之前相同:对于导入目标为 on,对于其他目标为 off。
模块¶
FetchContent
模块的FetchContent_Declare()
命令新增了SYSTEM
选项,该选项在SYSTEM
子目录上设置SYSTEM
目录属性,这些子目录由FetchContent_MakeAvailable()
创建。FindCUDAToolkit
模块现在为 CUDA 10.0+ 提供了 nvtx3 的目标,它取代了 nvToolsExt。如果项目需要 CMake 3.25 并且使用 CUDA 10.0+,则在使用nvToolsExt
时会发出弃用警告。FindDoxygen
模块的版本处理已得到改进如果需要满足版本约束,现在将考虑多个候选安装。以前,只会考虑遇到的第一个。
支持版本范围。
现在可以容忍 Doxygen 报告的版本格式的变化(例如,尾随 git 提交哈希)。
FindOpenAL
模块现在提供导入的目标。添加了
FindOpenSP
模块,用于查找 OpenSP 库。FindVulkan
模块获得了对新组件的支持dxc
DirectX Shader Compiler。
volk
Volk 开源 vulkan 元加载器。
CPack¶
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)
添加到库搜索路径。请参阅策略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
编译器不再被选中,因为 CMake 尚不支持其类似 GNU 的命令行。
3.25.3¶
此版本未对已记录的特性或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。