CMake 3.27 发行说明

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

新功能

调试器

  • cmake(1) 现在支持对 CMake 语言进行交互式调试。请参阅 --debugger 选项。

预设

生成器

语言

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

基于文件的 API

  • “codemodel” version 2 的 cmake-file-api(7) 的 `version` 字段已更新为 2.6。

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

平台

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

命令

变量

属性

模块

  • 模块 FindCUDAToolkit 现在为 `cudla` 提供了一个导入目标,并为 CUPTI 的 `nvperf` 和 `pcsampling` 组件提供了导入目标。

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

  • 模块 FindOpenGL 增加了对组件 `GLES2` 和 `GLES3` 的支持。

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

生成器表达式

自动生成

CTest

CPack

已弃用和移除的功能

  • 与 CMake 3.5 及更早版本的兼容性现已弃用,并将在未来的 CMake 版本中移除。调用设置策略版本为较旧值的 `cmake_minimum_required()` 或 `cmake_policy()` 现在会发出弃用诊断。

  • 附加生成器已被弃用。IDE 可以使用 cmake-file-api(7) 来查看 CMake 生成的项目构建树。

  • 模块 FindCUDA(自 CMake 3.10 起已弃用)已根据策略 CMP0146 移除。请将项目迁移到 CMake 的一流 `CUDA` 语言支持。

  • 模块 FindPythonInterpFindPythonLibs(自 CMake 3.12 起已弃用)已根据策略 CMP0148 移除。请将项目迁移到 FindPython3FindPython2FindPython

  • 模块 DartFindDart 已通过策略 CMP0145 弃用。请将项目迁移到 CTest 模块。

  • 生成器 `Visual Studio 9 2008` 已弃用,并将在未来的 CMake 版本中移除。

其他更改

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

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

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

  • `ExternalProject` 的 `update` 和 `patch` 步骤现在总是在其详细信息发生更改时重新运行,即使启用了 `UPDATE_DISCONNECTED` 选项。如果使用 `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" version 2 "target" 对象的 `fileSets` 字段,其 `baseDirectories` 成员中的条目错误地表示为绝对路径,即使它们位于顶级源目录内。这在 CMake 3.26.6 中已修复,并在 3.27.9 中也已修复。客户端需要更新以期望顶级源目录下的相对路径。

  • 在 CMake 3.27.0 中,Ninja Generators 中的 Fortran 模块依赖项扫描已更新为使用精确排序依赖项。这本应修复在模块源在目标之间移动时出现的微妙的重新构建失败。此后,人们发现了一些在使用 对象库 时精确排序依赖项计算不正确的情况。其中一些情况已在 3.27.x 补丁系列中逐步修复,但此后又发现了一些更微妙的情况。为了避免 3.27 发布系列中进一步的变动,已撤销原始更改,并将其推迟到未来的 CMake 版本。