CMake 3.17 发行说明

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

新功能

生成器

语言

  • Compile Features 功能现在为 CUDA 语言标准级别(例如 cuda_std_03cuda_std_14)提供元特征。请参阅:prop_gbl:CMAKE_CUDA_KNOWN_FEATURES

编译器

  • 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 工具并具有更好的语义。

命令

  • add_custom_command() 命令学会了解释相对于当前二进制目录指定的 DEPENDS 参数中的路径。

  • foreach() 命令学习了一个新的 ZIP_LISTS 选项来同时迭代多个列表。

  • load_cache(READ_WITH_PREFIX) 命令模式在使用 cmake -PRun a Script 时被允许。

  • message() 命令学会输出在 CMAKE_MESSAGE_CONTEXT 变量中为日志级别 NOTICE 及以下提供的上下文。使用新的 --log-context 命令行选项或 CMAKE_MESSAGE_CONTEXT_SHOW 变量启用此输出。

  • message() 命令获得了新的关键字 CHECK_STARTCHECK_PASSCHECK_FAIL

  • target_compile_options() 命令现在更一致地支持 BEFORE 关键字。请参阅政策:policy:CMP0101

变量

特性

模块

  • 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。请参阅政策:policy:CMP0098

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

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

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

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

自动生成器

  • AUTOMOCAUTOUIC 学会了处理带有 .hh` 扩展名的标头。请参阅政策:policy:CMP0100

C测试

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

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

  • ctest(1) 工具获得了一个 --no-tests=<[error|ignore]> 选项,用于在未找到测试时显式设置和统一直接调用和脚本模式之间的行为。

  • ctest(1) 工具获得了一个 --repeat <mode>:<n> 选项来指定重复测试的条件。这概括了现有的``--repeat-until-fail <n>``选项以添加``until-pass``和``after-timeout``的模式。

  • ctest_test() 命令获得了 REPEAT <mode>:<n> 选项来指定重复测试的条件。

包装

其他

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

  • ccmake(1) 现在在配置和生成期间显示消息和进度条。如果发生任何错误或警告,它将保持输出显示。

弃用和删除的功能

  • 为策略“CMP0068”和策略“CMP0069”添加了明确的弃用诊断(“CMP0067”及以下已弃用)。 cmake-policies(7) 手册解释说所有策略的旧行为都已弃用,项目应该移植到新行为。

  • 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 现在可以通过对静态库的私有依赖项传递。请参阅政策:policy:CMP0099

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

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

  • Ninja 生成器现在更喜欢第一个 ninja 构建工具出现在 PATH 中,无论它被称为 ninja-buildninjasamu .以前,首选出现在 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