CMake 3.27 发行说明

自 CMake 3.26 以来的更改包括以下内容。

新特性

调试器

预设

生成器

语言

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

基于文件的 API

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

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

平台

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

命令

变量

属性

模块

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

  • FindDoxygen 模块的 doxygen_add_docs() 命令获得了一个 CONFIG_FILE 选项,用于指定自定义的 doxygen 配置文件。

  • FindOpenGL 模块获得了对组件 GLES2GLES3 的支持。

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

生成器表达式

Autogen

CTest

CPack

已弃用和移除的功能

其他更改

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

  • ExternalProjectFetchContent 模块现在将相对 GIT_REPOSITORY 路径解析为相对于父项目的远程仓库,而不是相对于本地文件系统路径。请参阅 CMP0150

  • 当启用 UPDATE_DISCONNECTED 选项时,ExternalProject configure 步骤不再在每次构建时重新运行。只有在 downloadupdatepatch 步骤的详细信息更改时才会重新运行。

  • 即使启用了 UPDATE_DISCONNECTED 选项,如果 ExternalProject updatepatch 步骤的任何详细信息发生更改,它们现在始终重新运行。如果使用 GIT 下载方法,并且 GIT_TAG 更改为本地尚不知道的提交,则现在会发出错误,而不是静默地使用先前的 GIT_TAG

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

  • file(GET_RUNTIME_DEPENDENCIES) 命令现在保留在 Windows 上报告的 DLL 名称的大小写。它们仍然转换为小写以进行过滤器匹配。

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

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

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

更新

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

3.27.1

  • 此版本未对文档化的功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。

3.27.2

  • 用于 VS 14 (2015) 及更高版本的 Visual Studio 生成器 现在更倾向于选择最新的 Windows SDK,如策略 CMP0149 所述,当目标为任何 Windows 版本时。在 CMake 3.27.[0-1] 中,此偏好仅限于以 Windows 10 及更高版本为目标。

  • 用于 VS 14 (2015) 及更高版本的 Visual Studio 生成器 现在支持在 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 3.26.0 引入了 cmake-file-api(7) "codemodel" 版本 2 "target" 对象的 fileSets 字段,但其 baseDirectories 成员的条目被错误地表示为绝对路径,即使它们位于顶层源目录中。 这在 CMake 3.26.6 中得到了修复,现在在 3.27.9 中也得到了修复。 客户端必须更新以期望顶层源目录下的相对路径。

  • CMake 3.27.0 更新了 Ninja Generators 中的 Fortran 模块依赖项扫描,以使用精确的排序规则依赖项。 这本应修复在目标之间移动模块源时发生的细微重建失败。 从那时起,已经发现了几种在使用 Object Libraries 时,精确排序规则依赖项计算不正确的情况。 其中一些情况已通过 3.27.x 补丁系列逐步修复,但此后又发现了其他更微妙的情况。 为了避免 3.27 版本系列中进一步的变动,原始更改已被还原并推迟到 CMake 的未来版本。