CMake 3.17 发行说明

自 CMake 3.16 做出的更改包括以下内容。

新特征

生成器

语言

编译器

  • 现在,IBM XL Fortran 编译器受 Ninja 生成器的支持。

命令行

  • cmake(1) 添加了 --debug-find 命令行选项,以在 find_* 命令搜索位置时启用其他可供人工阅读的输出。

  • cmake(1) 添加了 --trace-format 命令行选项,可用于设置 --trace 输出格式。当前,支持旧的可人工阅读格式和新的 JSON 格式。与现有格式相比,新的 JSON 格式更容易自动解析。

  • cmake(1) 添加了 -E rm 命令行工具,可用于删除目录和文件。此工具取代了现有的 -E remove-E remove_directory 工具,语义更好。

命令

变量

属性

模块

  • ExternalProject 模块 ExternalProject_Add() 命令获得 GIT_SUBMODULES_RECURSE 选项,用于指定是否应递归更新 Git 子模块。默认设置为打开,以保留现有行为。

  • 添加 FindCUDAToolkit 模块,用于在不将 CUDA 作为语言启用时查找 CUDA Toolkit。

  • FindCURL 模块已学会使用由 CURL 的 cmake 构建系统生成的 CURLConfig.cmake 包配置文件查找 CURL。还获得 CURL_NO_CURL_CMAKE 选项,用于禁用此行为。

  • FindFLEX 模块的 FLEX_TARGET 命令现在使用 CMAKE_CURRENT_BINARY_DIR 作为工作目录来运行 flex。请参阅策略 CMP0098

  • 模块 FindLibArchive 现在为 libarchive 提供一个导入目标。

  • 模块 FindPython已学会查找由 conda管理的处于活动状态的虚拟环境中的 Python 组件。

  • 模块 FindPython3FindPython 分别获得了变量 Python3_SOABIPython_SOABI,为模块提供标准扩展后缀。此外,命令 Python3_add_library()Python_add_library() 获得了选项 WITH_SOABI,以此将库后缀添加 SOABI 的值作为前缀。

  • 模块 FindLibXml2 现在为 xmllint 可执行文件提供导入目标。

Autogen

CTest

  • 现在当使用 -C <cfg> 调用 ctest(1) 时,变量 CTEST_CONFIGURATION_TYPE 将会从命令行设置。

  • 工具 ctest(1) 获得了对 Dr. Memory 的支持,以运行 memcheck 运行。

  • ctest(1) 工具获取了一个 --no-tests=<[error|ignore]> 选项,用于在直接调用和脚本模式下明确设置和统一在没有找到测试时所采取的行为。

  • ctest(1) 工具获取了一个 --repeat <mode>:<n> 选项,用于指定重复测试的条件。这将现有的 --repeat-until-fail <n> 选项进行了概括化,添加了 until-passafter-timeout 的模式。

  • ctest_test() 命令获取了一个 REPEAT <mode>:<n> 选项,用于指定重复测试的条件。

CPack

其他

  • ccmake(1) 现在会根据条目类型使用颜色显示缓存值,如果终端支持颜色的话。

  • ccmake(1) 现在会在配置和生成过程中显示消息和进度条。如果出现任何错误或警告,它会将输出保留在显示中。

已弃用和已移除的功能

  • 为策略 CMP0068 和策略 CMP0069 (CMP0067 和以下版本已弃用) 添加了明确的弃用诊断信息。 cmake-policies(7) 手册解释说所有策略的 OLD 行为都已弃用,项目应移植到 NEW 行为。

  • CPack PackageMaker 生成器已弃用,因为 Xcode 不再分发 PackageMaker 工具。未记录的 OSXX11 生成器也已弃用。

  • cmake(1) 命令行 -E remove-E remove_directory 工具已弃用,推荐使用新的 -E rm 工具。如果没有力强制选项,旧工具在命名的路径不存在时常常会返回 0,无法在不破坏兼容性的情况下修复它,所以被废弃。

  • CPack NSIS Generator 现在需要 NSIS 3.0 或更高版本。

其他更改

  • file API 索引文件现在发送 multiConfig 标记,指定生成器是否支持多个输出配置。

  • 目标链接属性 INTERFACE_LINK_OPTIONSINTERFACE_LINK_DIRECTORIESINTERFACE_LINK_DEPENDS 现在可以通过对静态库的私有依赖进行传递。请参阅策略 CMP0099

  • 在使用 MinGW 工具时,find_library() 命令默认不再查找 .dll 文件。相反,它希望有可用的 .dll.a 导入库。

  • 如果环境的 PATH 中存在 sh.exeMinGW Makefiles 生成器不再发出错误。

  • 无论是在 PATH 的何处被调用为 ninja-buildninjasamuNinja 生成器现在优先选择第一个出现在 PATH 中的 ninja 构建工具。之前,PATH 的任何位置出现的这些名称中的第一个将被优先考虑。

  • 使用 SDCC 时,sdar 工具现在优于 sdcclib 作为库管理工具。后者在 SDCC 3.2.0 中已被弃用,并在 SDCC 3.8.6 中被移除。

  • 使用 SDCC 时,默认标志不再包括任何目标特定的标志。之前的默认标志是针对 8051 硬编码的。

  • 在编译器标识和使用 add_custom_target() 命令创建的目标中,CMAKE_VS_GLOBALS 变量值现在适用。

  • 不再对Xcode生成器永久编码-Wmost-Wno-four-char-constants-Wno-unknown-pragmas警告标志。

更新

自 CMake 3.17.0 起所做的更改包括以下内容。

3.17.1

  • CMake 3.17.0 更新了CPack NSIS Generator,其中包含需要 NSIS 3.0 或更高版本的更改。现已执行使用足够新版本的 CMake 3.17.1。

3.17.3

3.17.5

  • CMAKE_AUTOMOC_PATH_PREFIX 的默认值已更改为 OFF,因为此功能可能会损坏在不同包含目录中具有相同名称头文件的现有项目。这恢复了CMake 3.15及其之前的行为的兼容性。在 3.16.9 中,默认值也已变为 OFF