CMake 3.27 发行说明

自 CMake 3.26 以来所做的变更内容包括:

新特性

调试器

预设值

生成器

Languages

  • CXX 语言现在将源文件扩展名 .ccm.cxxm.c++m 视为 C++。

File-Based API

  • cmake-file-api(7) “codemodel” 版本 2 version 字段已更新至 2.6。

  • cmake-file-api(7) “codemodel” 版本 2 “target” 对象在 “compileGroups” 对象中获得了一个新的 “frameworks” 字段。

Platforms

  • 现在可以在 macOS 上为共享库创建基于 Apple 文本的存根(即 .tbd 文件)。请参见 ENABLE_EXPORTS 属性。

Commands

变量

属性

模块

  • FindCUDAToolkit 模块现在为 cudla 提供一个导入目标,并为 CUPTI 的 nvperfpcsampling 组件提供导入目标。

  • FindDoxygen 模块的 doxygen_add_docs() 命令添加了一个 CONFIG_FILE 选项以指定一个自定义 doxygen 配置文件。

  • FindOpenGL 模块添加了对组件 GLES2GLES3 的支持。

  • FindwxWidgets 模块现在提供导入目标。

生成器表达式

自动生成

CTest

CPack

已弃用和移除功能

其他更改

  • cmake --build $dir --verbose 现在将打印执行构建所用的工作目录和命令行。

  • 当启用 UPDATE_DISCONNECTED 选项时,ExternalProjectFetchContent 模块现在将相对 GIT_REPOSITORY 路径解析为父项目远程文件的相对路径,而不是相对本地文件系统路径。请参见 CMP0150

  • 在启用 UPDATE_DISCONNECTED 选项时,ExternalProject configure 步骤不再在每次构建时重新运行。仅在 downloadupdatepatch 步骤的详情发生变化时,它才会重新运行。

  • 现在,即使启用了 UPDATE_DISCONNECTED 选项,ExternalProjectupdatepatch 步骤也会在任何详细信息更改后重新运行。如果使用 GIT 下载方法,并且 GIT_TAG 更改为本地尚未知的提交,则现在会发出错误,而不是在不知不觉间使用之前的 GIT_TAG

  • FindPythonFindPython2FindPython3 模块现在支持 Windows ARM64 平台。

  • file(GET_RUNTIME_DEPENDENCIES) 命令现在保留 Windows 上报告的 DLL 名称的大小写。仍会将其转换为小写以进行筛选匹配。

  • SYSTEM 目标属性现在适用于 Apple Frameworks。

  • Visual Studio 生成器,适用于 VS 15.8(2017)及更高版本,现在会并行构建自定义命令。请参阅策略 CMP0147

  • Visual Studio 生成器,适用于 VS 14(2015)及更高版本,现在更愿意选择最新的 Windows SDK 版本。请参阅策略 CMP0149

更新

自 CMake 3.27.0 以来所做的更改包括以下内容。

3.27.1

  • 此版本未对已记录功能或界面进行任何更改。已对一些实现进行更新,以支持生态系统更改和/或修复回归。

3.27.2

  • Visual Studio 生成器,适用于 VS 14(2015)及更高版本,现在更愿意选择最新的 Windows SDK(策略 CMP0149 中记录),以定位任何 Windows 版本。在 CMake 3.27.[0-1] 中,此优先选择仅限于定位 Windows 10 及更高版本。

  • Visual Studio 生成器(适用于 VS 14(2015)及以上版本)现在支持在 CMAKE_GENERATOR_PLATFORM 变量中使用 version=8.1 以选择 Windows 8.1 SDK。在 CMake 3.27.[0-1] 中, version= 字段仅限于选择 Windows 10 SDK。

3.27.3、3.27.4、3.27.5、3.27.6、3.27.7、3.27.8

  • 这些版本未对记录的功能或界面进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。

3.27.9

  • cmake-file-api(7) “codemodel” 2 版“target”对象 fileSets 字段由 CMake 3.26.0 引入,其 baseDirectories 成员的条目被不正确地表示为绝对路径,即使它们位于顶级源目录中。此问题已在 CMake 3.26.6 中修复,并已在 3.27.9 中修复。必须更新客户端以在顶级源目录下预留相对路径。

  • Fortran 模块依赖关系扫描在 Ninja 生成器 中已由 CMake 3.27.0 更新为使用完全比对的依赖关系。当在目标之间移动模块源时,这应该可以修复微妙的重新构建失败。自此,已发现了在使用 对象库 时错误计算完全比对的依赖关系的多个案例。其中一些案例已通过 3.27.x 补丁系列逐步修复,但后来又发现了一些更加微妙的案例。为了避免在 3.27 发行版系列中发生进一步的彻底改变,原始更改已被还原并推迟到 CMake 的未来版本。