CMake 4.2 发行说明

自 CMake 4.1 以来的变更包括以下内容。

新功能

基于文件的 API

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

  • cmake-file-api(7) 的“codemodel”版本 2 中的“target”和“directory”对象新增了一个 codemodelVersion 字段。

  • cmake-file-api(7) 的“codemodel”版本 2 现在在其回复中包含导入目标(imported targets)和所有接口库目标(interface library targets)。此前,导入目标被忽略,且仅包含那些参与构建系统的接口目标。以下变更为这些新增内容提供了支持:

    • “target”对象新增了 importedlocalabstract 字段。

    • “target”对象的 type 字段现在也可以包含 UNKNOWN_LIBRARY 值。

    • “codemodel”对象的 configurations 条目新增了一个 abstractTargets 数组。

    • “codemodel”对象的 configurations 条目中,directoriesprojects 数组中的条目新增了一个 abstractTargetIndexes 数组。

  • cmake-file-api(7) 的“codemodel”版本 2 “target”对象新增了 linkLibrariesinterfaceLinkLibrariescompileDependenciesinterfaceCompileDependenciesobjectDependenciesorderDependencies 字段。

生成器

平台

命令行

  • cmake(1) 命令行工具现在支持 cmake -E copy_if_newercmake -E copy_directory_if_newer 子命令,用于基于时间戳比较而非内容比较来复制文件。与通过比较文件内容来判断的 copy_if_different 相比,这些命令仅在源文件比目标文件更新时才进行复制,从而为构建系统提供了更好的性能。

命令

变量

属性

模块

  • 几乎所有的查找模块现在都提供一个名为 <PackageName>_VERSION 的结果变量,其大小写与模块名称一致。现有的变体(如 <PackageName>_VERSION_STRING 和全大写的 <PACKAGENAME>_VERSION)已被弃用。详情请参阅各查找模块的文档。

  • CheckTypeSize 模块的 check_type_size() 命令新增了一个 RESULT_VARIABLE 关键字,用于自定义结果变量名称,而非默认的 HAVE_<size-var>

  • ExternalProject 模块的 ExternalProject_Add()ExternalProject_Add_Step() 命令现在提供了在配置、构建、安装和测试步骤中设置环境变量的选项。

  • FindPython3FindPython2FindPython 模块不再使 NumPy 依赖于 Development.Module。请参阅策略 CMP0201

  • GoogleTest 模块的 gtest_discover_tests() 命令现在会在 gtest 支持 --gtest_output=json 选项的情况下,为每个发现的测试设置 DEF_SOURCE_LINE 测试属性。某些 IDE 使用此测试属性来定位每个测试的源代码。

  • UseSWIG 模块的 swig_add_library() 命令新增了一个 DEBUG_POSTFIX 选项,用于控制 DEBUG_POSTFIX 目标属性。

生成器表达式

CPack

已弃用和已删除的特性

  • 所有查找模块现在都提供一个名为 <PackageName>_FOUND 的结果变量,其大小写与模块名称一致。现有的变体(如全大写的 <PACKAGENAME>_FOUND)在适当情况下已被弃用。详情请参阅各查找模块的文档。

  • FindwxWidgets 模块的结果变量 wxWidgets_USE_FILE 现已被弃用,建议直接包含 UsewxWidgets 模块。

  • Visual Studio 14 2015 生成器现已被弃用,并将于未来版本的 CMake 中移除。

其他更改

  • $<CONFIG:cfgs> 生成器表达式在应用于导入目标时,已修复为不会匹配不适用的配置。请参阅策略 CMP0199

  • 导入目标的配置选择和定位现在更加一致。请参阅策略 CMP0200

  • 处理 CMakeLists.txt 文件时,不再定义 CMAKE_PARENT_LIST_FILE 变量。请参阅策略 CMP0198

  • 对于针对 MSVC ABI 的构建,所有生成器现在在编译源文件时,若未发现 _UNICODE_SBCS,都会添加 _MBCS 预处理器定义。请参阅策略 CMP0204

  • 对于针对 MSVC ABI 的构建,所有生成器现在在编译共享库中的源文件时,都会添加 _WINDLL 预处理器定义。请参阅策略 CMP0203

  • Visual Studio 生成器 现在会抑制 Visual Studio 的默认标志 -fp:precise-Gd-GS(如果项目或用户未指定它们)。这使得构建过程与其他生成器保持一致,并符合项目和用户实际指定的配置。

更新

自 CMake 4.2.0 以来的变更包括以下内容。

4.2.1

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

4.2.2

  • 策略 CMP0199 的 NEW 行为已被部分回退。在 4.2.0 和 4.2.1 中,$<CONFIG:cfgs> 仅匹配被消费目标的配置。这破坏了依赖于匹配消费目标配置的既有用例,因此该行为已被部分回退,使其能够像 CMake 4.1 及更早版本一样匹配任意一种配置。

4.2.3

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