CMake 3.21 发行说明

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

新功能

预设

生成器

语言

命令行

  • cmake(1) 获得了 --install-prefix 命令行选项来指定安装前缀的位置。

  • cmake(1) 获得了 --toolchain 命令行选项来指定工具链文件。

  • cmake(1) -E capabilities 输出,对于某些生成器,现在可能包含一个 supportedPlatforms 字段列表已知支持的平台 :variable:` CMAKE_GENERATOR_PLATFORM`。

  • 打印到终端的消息现在可以按消息类型着色。

编译器

  • Fujitsu 编译器现在支持在传统 (Trad) 模式下使用编译器 ID Fujitsu,在``Clang`` 模式下使用编译器 ID FujitsuClang

平台

  • CMake 现在支持 MSYS 运行时环境,很像 CYGWIN。

基于文件的 API

  • cmake-file-api(7) "codemodel" version 2 version 字段已更新为 2.3。

  • cmake-file-api(7) “代码模型”版本 2 获得了一个包含目录级信息的新“目录”对象。这包括由 install() 命令生成的安装程序列表。

命令

变量

特性

  • 添加了 IMPORTED_TARGETS 目录属性以获取在当前目录中创建的 进口目标 列表。

  • 添加了:prop_tgt:XCODE_EMBED_APP_EXTENSIONS <XCODE_EMBED_<type>> 目标属性,以告知:generator:Xcode 生成器嵌入应用程序扩展,例如 iMessage 贴纸包。嵌入的各个方面可以使用 XCODE_EMBED_APP_EXTENSIONS_PATHXCODE_EMBED_APP_EXTENSIONS_CODE_SIGN_ON_COPY 和 :prop_tgt 进行自定义 :XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY <XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY> 属性.

模块

  • FindBLASFindLAPACK 模块学会了支持串行 Fujitsu_SSL2 和并行 Fujitsu_SSL2BLAMP 库。

  • FindDevIL 模块现在提供导入的目标。

  • FindIconv 模块现在有版本支持。

  • FindIntl 模块现在有版本支持。

  • FindMPI 模块学会了在主机和交叉编译模式下支持 FujitsuFujitsuClang

  • 添加了 FindMsys 模块以查找 MSYS 安装。像 FindCygwin 一样,其他一些查找模块会自动使用它在 Windows 上定位 UNIX 风格的工具。

  • FindOpenMP 模块学会了支持 FujitsuFujitsuClang

  • FindVulkan 模块获得了导入的目标 Vulkan::HeadersVulkan::glslangValidator

  • UseJava 模块命令 add_jar 获得了 RESOURCES 选项,以允许使用非可选命名空间显式命名资源。

  • UseSWIG 模块现在使用 CSharp 语言的标准库命名约定。请参阅政策:policy:CMP0122

  • UseSWIG 模块现在支持使用 swig 工具通过 Xcode 生成器生成隐式依赖项。

生成器表达式

C测试

包装

弃用和删除的功能

  • 未记录的 CMAKE_SYSTEM_NAME 版本剥离行为已被完全删除。如果它由 -D 标志或 toolchain 文件 设置,则它保持不变,即使它仍然包含版本号。类似的 CMAKE_HOST_SYSTEM_NAME 版本剥离行为,也未记录,已在调用 project()enable_language() 之前移动。

  • 不再根据 CMAKE_SYSTEM_PROCESSOR 变量或未记录的 CMAKE_SYSTEM_ARCH 变量自动添加 ARMClang cpu/arch 编译和链接标志。它们必须明确指定。请参阅政策:policy:CMP0123

其他变化

  • find_file()find_path()find_program()find_library() 命令以相同的方式处理缓存变量,无论它们是如何定义的。有关详细信息,请参阅政策:policy:CMP0125

  • find_file()find_path()find_program()find_library() 命令获得了选项 NO_CACHE 以将查找结果存储在普通变量中。

  • foreach() 命令现在在循环范围内隔离循环变量。有关详细信息,请参阅政策:policy:CMP0124

  • list() 命令的 GETINSERTSUBLISTREMOVE_AT 子命令现在错误并给出无效(即非整数)值作为任何它们的索引参数基于策略设置:policy:CMP0121

  • set(CACHE) 命令不再删除同名的普通变量(如果有的话)。请参阅政策:policy:CMP0126

  • target_link_libraries() 通过 TARGET_OBJECTS 生成器表达式调用引用目标库现在将目标文件放在链接行上所有库之前,无论它们的指定顺序如何。有关详细信息,请参阅有关 通过 $<TARGET_OBJECTS> 链接对象库的文档。

  • 忍者生成器 现在使用绝对路径将源文件和包含目录传递给编译器。这使得诊断消息和调试符号更加一致,并且与 Makefile Generators 相匹配。

  • 当使用 VS 9 或更高版本的 nmake 时, NMake Makefiles 生成器现在将生成的 makefiles 编码为带有 BOM 的 UTF-8。

  • VS 2010 及更高版本的 Visual Studio 生成器 现在将每个源预处理器定义放在目标范围预处理器定义之后。这使得 VS 与 忍者生成器Makefile 生成器 保持一致。

  • cmake.org 上提供的预编译二进制文件现在支持 liblzma 多线程。请参阅 CPACK_THREADSCPACK_ARCHIVE_THREADS 变量。

更新

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

3.21.1

  • Visual Studio 17 2022 生成器现在基于“Visual Studio 2022 Preview 2”。以前它基于“Preview 1.1”。

3.21.2

3.21.3

  • Visual Studio 17 2022 生成器现在基于“Visual Studio 2022 Preview 4”。以前它基于“Preview 3.1”。

  • CMake 3.21.0 到 3.21.2 将 AMD ROCm 平台“hipcc”编译器标识为具有 id“ROCMClang”的独特编译器。这已被删除,因为它导致回归。反而:

    • hipcc 可能不再用作 HIP 编译器,因为它会干扰 CMake 需要传递给 Clang 的标志。直接使用 Clang。

    • hipcc 可以再次用作 CXX 编译器,并被视为它在下面选择的任何编译器,就像 CMake 3.20 及以下版本一样。

3.21.4

  • Visual Studio 17 2022 生成器现在基于“Visual Studio 2022”候选版本。以前它基于预览版本。

3.21.5, 3.21.6, 3.21.7

这些版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。