CMake 3.17 发行说明

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

新特性

生成器

语言

编译器

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

命令行

  • 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 工具包。

  • 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 的支持,以运行内存检查运行。

  • 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 和策略 CMP0069CMP0067 及以下版本已弃用)添加了显式弃用诊断。 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 生成器不再发出错误。

  • Ninja 生成器现在优先选择在 PATH 中出现的第一个 ninja 构建工具,无论它被称为 ninja-buildninja 还是 samu。以前,会优先选择在 PATH 中任何位置出现的这些名称中的第一个。

  • 对于 SDCC,现在首选 sdar 工具而不是 sdcclib 作为库管理器。后者已在 SDCC 3.2.0 中被弃用,并在 SDCC 3.8.6 中移除。

  • 对于 SDCC,默认标志不再包含任何特定于目标的标志。以前,默认标志是为 8051 硬编码的。

  • CMAKE_VS_GLOBALS 变量值现在在编译器识别期间以及由 add_custom_target() 命令创建的目标中应用。

  • 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