CMake 3.26 发布说明¶
自 CMake 3.25 以来的更改包括以下内容。
新功能¶
语言¶
添加了
ASM_MARMASM语言以支持 Microsoft ARM 汇编语言。
命令行¶
cmake -E copy命令行工具现在支持-t参数。添加了
cmake -E copy_directory_if_different命令行工具。
配置日志¶
CMake 现在将配置时检查的 YAML 日志写入构建树顶部的
CMakeFiles/CMakeConfigureLog.yaml。请参阅cmake-configure-log(7)手册。
基于文件的 API¶
cmake-file-api(7)的 "codemodel" 版本 2 的version字段已更新至 2.5。cmake-file-api(7)的 "codemodel" 版本 2 的 "target" 对象获得了新的fileSets字段以及sources对象中相关的fileSetIndex字段。cmake-file-api(7)的 "codemodel" 版本 2 的 "directory" 对象installers字段获得了新的cxxModuleBmi安装程序类型和相关的cxxModuleBmiTarget字段。cmake-file-api(7)获得了一个新的 "configureLog" 对象类型,该类型允许稳定地访问cmake-configure-log(7)。
命令¶
add_custom_command()和add_custom_target()命令现在支持其COMMENT选项中的生成器表达式。message()命令获得了一个CONFIGURE_LOG模式,用于在cmake-configure-log(7)中记录一项。string(TIMESTAMP)和file(TIMESTAMP)命令现在支持时区的%z和%Z说明符。try_compile()和try_run()命令获得了一个LOG_DESCRIPTION选项,用于指定要记录在cmake-configure-log(7)中的文本。try_compile()和try_run()命令获得了一个NO_LOG选项,用于跳过记录cmake-configure-log(7)条目。
变量¶
变量
CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT现在为只有一种前端变体的GNU、MSVC和AppleClang编译器设置。变量
CMAKE_VS_VERSION_BUILD_NUMBER现在由 Visual Studio 生成器 为 VS 2017 及更高版本设置,以报告四部分的 Visual Studio 版本号。
属性¶
添加了目标属性
<LANG>_CLANG_TIDY_EXPORT_FIXES_DIR,以允许clang-tidy工具将其建议的修复导出到一组.yaml文件。创建了一个新的变量CMAKE_<LANG>_CLANG_TIDY_EXPORT_FIXES_DIR来初始化此属性。添加了目标属性
XCODE_EMBED_EXTENSIONKIT_EXTENSIONS,用于告知Xcode生成器嵌入基于 ExtensionKit 的扩展,例如使用 Background Assets 框架的扩展。可以通过以下方式自定义嵌入的各个方面:
模块¶
ExternalProject模块的ExternalProject_Add()命令获得了INSTALL_BYPRODUCTS选项,用于指定install步骤生成的*.p*FindCUDAToolkit模块获得了对
sbsa-linux交叉编译目标的支持,并且现在为
nvrtc_static提供了一个导入目标(如果找到)。
FindImageMagick模块现在提供导入目标。FindPython3和FindPython模块获得了对 稳定应用程序二进制接口 的支持。UseSWIG模块获得了对perl5语言的支持。
生成器表达式¶
添加了生成器表达式
$<BUILD_LOCAL_INTERFACE:...>,以防止使用要求导出到依赖项目。
CTest¶
添加了环境变量
CTEST_NO_TESTS_ACTION,为ctest(1)的--no-tests=<action>命令行参数提供默认值。
已弃用和已删除的功能¶
文件
CMakeFiles/CMakeOutput.log和CMakeFiles/CMakeError.log不再由 CMake 的内置模块填充。cmake(1)在发生CMake Error后不再建议查看它们。先前记录到这些文件的信息现已记录到cmake-configure-log(7)中。在 CYGWIN 上,已移除用于与早于 2.8.4 的 CMake 版本兼容的未文档化的
CMAKE_LEGACY_CYGWIN_WIN32模式。
其他更改¶
通过
target_compile_features()或CMAKE_<LANG>_STANDARD生成的语言标准标志,例如-std=c++11,现在放置在target_compile_options()添加的标志之前,而不是之后。对于所有
COMPILE_DEFINITIONS属性,无论是否由生成器表达式指定,任何项前面的-D都将被移除。通过
CMAKE_EXPORT_COMPILE_COMMANDS启用的compile_commands.json数据库现在为编译命令对象提供了output字段。这使得多配置生成器(例如Ninja Multi-Config生成器)能够提供所有配置的编译命令。全局属性
USE_FOLDERS默认被视为ON。请参阅策略CMP0143。顶级
project()调用现在会在未遵守cmake_minimum_required()的cmake_minimum_required()相对于project()的文档命令顺序时发出作者警告。cmake --trace选项现在会跟随try_compile()和try_run()调用。
更新¶
自 CMake 3.26.0 以来的更改包括以下内容。
3.26.1, 3.26.2, 3.26.3, 3.26.4, 3.26.5¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。
3.26.6¶
cmake-file-api(7)的 "codemodel" 版本 2 的fileSets字段由 CMake 3.26.0 引入,其baseDirectories成员的条目错误地表示为绝对路径,即使它们位于顶层源目录内。此问题已修复。客户端必须更新以预期顶层源目录下的相对路径。