CMake 4.2 版本说明¶
自 CMake 4.1 以来的更改包括以下内容。
新特性¶
基于文件的 API¶
“codemodel” 的 2.x 版本已将cmake-file-api(7)version字段更新为 2.9。“codemodel” 2.x 版本的 “target” 和 “directory” 对象新增了一个cmake-file-api(7)codemodelVersion字段。“codemodel” 2.x 版本现在在其响应中包含导入的目标和所有接口库目标。以前,导入的目标被省略,只包含那些参与构建系统的接口目标。以下更改支持这些新增内容:cmake-file-api(7)“target” 对象新增了
imported、local和abstract字段。“target” 对象的
type字段现在还可以包含UNKNOWN_LIBRARY值。“codemodel” 对象的
configurations条目新增了一个abstractTargets数组。“codemodel” 对象的
configurations条目的directories和projects数组中的条目新增了一个abstractTargetIndexes数组。
“codemodel” 2.x 版本的 “target” 对象新增了cmake-file-api(7)linkLibraries、interfaceLinkLibraries、compileDependencies、interfaceCompileDependencies、objectDependencies和orderDependencies字段。
生成器¶
新增了
生成器。Visual Studio 18 2026新增了
生成器。FASTBuild
平台¶
CMake 现在支持使用简单的工具链文件进行 Emscripten 的交叉编译。
命令行¶
命令行工具现在支持cmake(1)cmake -E copy_if_newer和cmake -E copy_directory_if_newer子命令,通过时间戳比较而非内容比较来复制文件。这些命令仅在源文件比目标文件新时才复制文件,与比较文件内容的copy_if_different相比,为构建系统提供了更好的性能。
命令¶
新增了
命令,用于在脚本执行期间启用或禁用跟踪。cmake_language(TRACE)新增了
和set(CACHE{<variable>})命令,用于显式设置和取消设置缓存条目。unset(CACHE{<variable>})新增了
命令,用于生成精确匹配字符串的正则表达式。string(REGEX QUOTE)
变量¶
新增了
变量,用于设置标准库的CMAKE_CXX_STDLIB_MODULES_JSONimport std元数据文件的路径,而不是使用编译器来发现其位置。新增了
变量和相应的CMAKE_INTERMEDIATE_DIR_STRATEGY环境变量,用于更改用于命名对象文件和其他相关目标元数据所使用的中间目录的策略。CMAKE_INTERMEDIATE_DIR_STRATEGY新增了
变量和相应的CMAKE_AUTOGEN_INTERMEDIATE_DIR_STRATEGY环境变量,用于更改用于命名CMAKE_AUTOGEN_INTERMEDIATE_DIR_STRATEGY文件的中间目录的策略。Qt Autogen新增了
变量和相应的CMAKE_SKIP_LINTING目标属性,用于告知 命令行构建工具生成器 跳过对目标中所有源文件的 linting。SKIP_LINTING
属性¶
新增了
源文件属性,用于控制特定编译源的已安装对象文件的名称。INSTALL_OBJECT_NAME新增了
目标属性,用于控制已安装对象文件的命名策略。INSTALL_OBJECT_NAME_STRATEGY新增了
目标属性,用于更精确地控制对象文件的安装路径。INSTALL_OBJECT_ONLY_USE_DESTINATION新增了
源文件属性,用于将单个源文件的编译分配给JOB_POOL_COMPILE。JOB_POOLS新增了
源文件属性,用于控制编译源文件的对象名称。OBJECT_NAME新增了
目标属性,用于控制UNITY_BUILD_FILENAME_PREFIX生成的源文件的名称。UNITY_BUILD
模块¶
几乎所有的 find 模块现在都提供一个
<PackageName>_VERSION结果变量,其大小写与模块名称匹配。现有的变体,如<PackageName>_VERSION_STRING和大写的<PACKAGENAME>_VERSION已被弃用。详情请参阅每个 find 模块的文档。模块的CheckTypeSize命令新增了一个check_type_size()RESULT_VARIABLE关键字,用于自定义结果变量名,而不是默认的HAVE_<size-var>。模块的ExternalProject和ExternalProject_Add()命令现在提供了设置 configure、build、install 和 test 步骤环境变量的选项。ExternalProject_Add_Step()、FindPython3和FindPython2模块不再使FindPythonNumPy依赖于Development.Module。请参阅策略。CMP0201模块的GoogleTest命令现在为每个发现的测试设置gtest_discover_tests()DEF_SOURCE_LINE测试属性,前提是 gtest 支持--gtest_output=json选项。此测试属性可供某些 IDE 用于定位每个测试的源文件。模块的UseSWIG命令新增了一个swig_add_library()DEBUG_POSTFIX选项,用于控制目标属性。DEBUG_POSTFIX
生成器表达式¶
新增了
和<LANG>_COMPILER_LINKER_ID系列生成器表达式,用于访问相关<LANG>_COMPILER_LINKER_FRONTEND_VARIANT和CMAKE_<LANG>_COMPILER_LINKER_ID变量的值。CMAKE_<LANG>_COMPILER_LINKER_FRONTEND_VARIANT、TARGET_FILE_BASE_NAME、TARGET_IMPORT_FILE_BASE_NAME、TARGET_LINKER_FILE_BASE_NAME、TARGET_LINKER_LIBRARY_FILE_BASE_NAME和TARGET_LINKER_IMPORT_FILE_BASE_NAME生成器表达式新增了一个TARGET_PDB_FILE_BASE_NAMEPOSTFIX选项,用于控制在相应文件的基本名称中包含目标属性。<CONFIG>_POSTFIX新增了
生成器表达式,用于引用构建树中目标的中间文件目录。TARGET_INTERMEDIATE_DIR
CPack¶
变量现在支持多个值。CPACK_PACKAGE_CHECKSUM新增了CPack NSIS Generator变量,用于设置CPACK_NSIS_CRC_CHECKCRCCheck属性。新增了CPack WIX Generator变量,用于为每个组件启用一个CPACK_WIX_CAB_PER_COMPONENT.cab文件。
已弃用和移除的功能¶
所有 find 模块现在都提供一个
<PackageName>_FOUND结果变量,其大小写与模块名称匹配。现有的变体,如大写的<PACKAGENAME>_FOUND,在适当的情况下已弃用。详情请参阅每个 find 模块的文档。模块的结果变量FindwxWidgetswxWidgets_USE_FILE已被弃用,建议直接包含模块。UsewxWidgets生成器已被弃用,将在 CMake 的未来版本中移除。Visual Studio 14 2015
其他更改¶
对于导入的目标,
生成器表达式的匹配已修复,使其仅匹配实际正在使用的配置。请参阅策略$<CONFIG:cfgs>。CMP0199导入目标的配置和位置选择现在更加一致。请参阅策略
。CMP0200在处理
CMakeLists.txt文件时,变量不再被定义。请参阅策略CMAKE_PARENT_LIST_FILE。CMP0198对于针对 MSVC ABI 的构建,所有生成器在编译源文件时都会添加
_MBCS预处理器定义,除非找到_UNICODE或_SBCS。请参阅策略。CMP0204对于针对 MSVC ABI 的构建,所有生成器在编译共享库中的源文件时都会添加
_WINDLL预处理器定义。请参阅策略。CMP0203