CMake 4.2 版本说明

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

新特性

基于文件的 API

  • cmake-file-api(7) “codemodel” 的 2.x 版本已将 version 字段更新为 2.9。

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

  • cmake-file-api(7) “codemodel” 2.x 版本现在在其响应中包含导入的目标和所有接口库目标。以前,导入的目标被省略,只包含那些参与构建系统的接口目标。以下更改支持这些新增内容:

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

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

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

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

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

生成器

平台

命令行

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

命令

变量

属性

模块

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

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

  • ExternalProject 模块的 ExternalProject_Add()ExternalProject_Add_Step() 命令现在提供了设置 configure、build、install 和 test 步骤环境变量的选项。

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

  • GoogleTest 模块的 gtest_discover_tests() 命令现在为每个发现的测试设置 DEF_SOURCE_LINE 测试属性,前提是 gtest 支持 --gtest_output=json 选项。此测试属性可供某些 IDE 用于定位每个测试的源文件。

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

生成器表达式

CPack

已弃用和移除的功能

  • 所有 find 模块现在都提供一个 <PackageName>_FOUND 结果变量,其大小写与模块名称匹配。现有的变体,如大写的 <PACKAGENAME>_FOUND,在适当的情况下已弃用。详情请参阅每个 find 模块的文档。

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

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

其他更改

  • 对于导入的目标,$<CONFIG:cfgs> 生成器表达式的匹配已修复,使其仅匹配实际正在使用的配置。请参阅策略 CMP0199

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

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

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

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