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" 对象在sources对象中新增了fileSets字段和关联的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)条目。
变量¶
对于只有一种前端变体的
GNU、MSVC和AppleClang编译器,现在会设置CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT变量。对于 VS 2017 及更高版本,Visual Studio 生成器现在会设置
CMAKE_VS_VERSION_BUILD_NUMBER变量,以报告四部分的 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步骤生成的文件的。该选项可用于指定在install步骤生成的副产品。FindCUDAToolkit模块增加了对
sbsa-linux交叉编译目标的支持,并且现在为
nvrtc_static提供了导入的目标(如果找到)。
FindImageMagick模块现在提供导入的目标。FindPython3和FindPython模块增加了对 稳定应用程序二进制接口 的支持。UseSWIG模块增加了对perl5语言的支持。
生成器表达式¶
添加了
$<BUILD_LOCAL_INTERFACE:...>生成器表达式,以防止将使用要求导出到依赖项目。
CTest¶
添加了
CTEST_NO_TESTS_ACTION环境变量,为ctest(1)的--no-tests=<action>命令行参数提供默认值。
已弃用和已删除的功能¶
CMake 的内置模块不再填充
CMakeFiles/CMakeOutput.log和CMakeFiles/CMakeError.log文件。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生成器)能够为所有配置提供编译命令。顶级
project()调用现在会发出作者警告,如果其与cmake_minimum_required()的命令顺序不符合文档要求。请参阅策略CMP0143。顶级的
project()调用现在会发出作者警告,如果其与cmake_minimum_required()的命令顺序不符合文档要求。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成员的条目被错误地表示为绝对路径,即使它们位于顶层源目录内。此问题已修复。客户端必须更新以期望顶层源目录下的相对路径。