CMake 4.3 发行说明¶
自 CMake 4.2 以来的变更如下。
新功能¶
通用包规范¶
增加了对导入和导出使用 通用包规范 (CPS) 描述的包的支持。这允许以非 CMake 语言的格式交换富有表现力、功能丰富的包描述,从而提高了构建系统的互操作性。
find_package()现在可以搜索并导入 CPS 包。project()命令新增了COMPAT_VERSION和SPDX_LICENSE选项。在创建 CPS 包描述时,这些值可以被继承。详情请参阅install(PACKAGE_INFO)文档。
仪器化¶
cmake-instrumentation(7)已被添加,用于在 CMake 项目的配置、生成、构建、测试和安装步骤中收集计时数据、目标信息和系统诊断信息。仪器化数据包含在提交给 CDash 的报告中。
(可选)可以生成 Google Trace Event Format 文件来可视化仪器化数据。
预设¶
cmake-presets(7)文件现在支持模式版本11。测试预设下的jobs字段现在支持空字符串,以匹配ctest --parallel在省略该值时的行为。无论模式版本如何,构建和测试预设下的
jobs字段不再接受负整数值。
基于文件的 API¶
cmake-file-api(7)“codemodel” 版本 2 的版本字段已更新至 2.10。cmake-file-api(7)“codemodel” 版本 2 的 “target” 对象新增了一个interfaceSources数组字段,且sourceGroups数组项新增了一个interfaceSourceIndexes数组字段。
平台¶
HIP语言代码现在可以编译为 SPIR-V 目标,例如通过 chipStar。请参阅CMAKE_HIP_PLATFORM变量。
命令行¶
cmake --version现在支持=json-v1值,以 JSON 格式打印详细的版本信息。cmake --build现在支持同时指定构建目录和预设。构建预设将与替换后的显式构建目录一起使用。cmake -E命令md5sum,sha1sum,sha224sum,sha256sum,sha384sum和sha512sum现在支持通过传递-从标准输入读取。添加了
cmake -E bin2c命令行工具。cmake -E tar命令行工具增加了
--cmake-tar-compression-level标志以指定压缩级别。增加了
--cmake-tar-compression-method标志以指定压缩方法。增加了
--cmake-tar-threads标志以启用多线程操作。现在支持为
7zip和zip格式指定压缩方法和级别。增加了
--format=raw标志以禁用压缩。增加了
--lzma标志以指定LZMA压缩。
命令¶
添加了
cmake_instrumentation()命令,用于进行项目级别的仪器化查询。-
增加了
THREADS选项以启用多线程操作。现在支持将压缩方法
Deflate作为GZip的别名。现在支持压缩方法
LZMA。现在支持将压缩方法
LZMA2作为XZ的别名。现在支持为
7zip格式使用压缩方法PPMd。现在支持为
7zip和zip格式使用COMPRESSION和COMPRESSION_LEVEL选项。
get_property()和set_property()命令现在支持针对目标文件集属性的FILE_SET作用域。string(JSON)命令新增了GET_RAW和STRING_ENCODE模式。source_group()命令现在支持生成器表达式。cmake_host_system_information()命令新增了LOCALE_CHARSET查询,用于获取预期的cmake-language(7)脚本编码。
变量¶
添加了
CMAKE_<LANG>_LINK_FLAGS和CMAKE_<LANG>_LINK_FLAGS_<CONFIG>变量,以支持所有目标类型的各语言链接标志。请参阅策略CMP0210。添加了
CMAKE_VERIFY_PRIVATE_HEADER_SETS变量及相应的VERIFY_PRIVATE_HEADER_SETS目标属性,以启用构建规则,验证私有文件集中的所有头文件是否可以单独使用。
属性¶
引入了
<LANG>_PVS_STUDIO目标属性及支持的CMAKE_<LANG>_PVS_STUDIO变量,用于告知 Makefile 生成器 和 Ninja 生成器 在编译C和CXX语言时运行pvs-studio-analyzer。当可执行目标上的
VERIFY_INTERFACE_HEADER_SETS被设置为 true 时,无论其ENABLE_EXPORTS属性如何,该目标的接口文件集都会被验证。请参阅策略CMP0209。添加了
PRIVATE_HEADER_SETS_TO_VERIFY目标属性,用于自定义当目标的VERIFY_PRIVATE_HEADER_SETS属性为 true 时,需要验证哪些私有文件集。
模块¶
FindCUDAToolkit模块现在为 bin2c 工具创建了一个CUDA::bin2c导入目标。FindLibXml2模块新增了LibXml2_USE_STATIC_LIBS提示,用于选择静态库。FindRuby模块现在提供导入目标。FindSQLite3模块现在提供带有SQLite3::前缀的导入目标。UseJava模块的add_jar()命令现在接受一个新的INCLUDE_MODULES选项,将参数添加到 Java 编译器的--module-path参数中。这允许构建在构建过程中使用 JPMS 模块的 JAR 文件。
生成器表达式¶
添加了 字符串比较 生成器表达式。
添加了
$<STRING:...>生成器表达式,用于对字符串进行 查询、生成 和 转换 操作。添加了
$<FILE_SET_EXISTS>和$<FILE_SET_PROPERTY>生成器表达式,用于查询文件集是否存在及其属性。添加了
$<SOURCE_EXISTS>和$<SOURCE_PROPERTY>生成器表达式,用于查询源文件是否存在及其属性。
CTest¶
-
现在支持
TARBALL_COMPRESSION方法LZMA。现在支持将
TARBALL_COMPRESSION方法LZMA2作为XZ的别名。现在支持
FROM_EXT使用对应LZMA和ZSTD压缩的文件扩展名。
CPack¶
CPack新增了CPACK_COMPRESSION_LEVEL变量,用于控制创建包时使用的压缩级别。-
现在支持为
7zip和zip格式指定压缩方法。增加了
CPACK_ARCHIVE_COMPRESSION_LEVEL选项,用于控制创建归档包时使用的压缩级别。增加了
CPACK_ARCHIVE_UID和CPACK_ARCHIVE_GID选项,分别用于指定归档条目的 UID 和 GID。默认值为 UID0和 GID0。请参阅策略CMP0206。
CPack DEB 生成器新增了一个CPACK_DEBIAN_COMPRESSION_LEVEL变量,用于控制创建 Debian 包时使用的压缩级别。CPack WIX 生成器现在支持通过将CPACK_WIX_INSTALL_SCOPE设置为perUser来实现每个用户安装程序。
已弃用和移除的功能¶
CMAKE_ENABLE_EXPORTS变量已弃用,转而使用CMAKE_EXECUTABLE_ENABLE_EXPORTS和CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS变量。export(EXPORT)命令不再允许缺少或留空某些参数。请参阅策略CMP0208。
其他更改¶
cmake -E tar命令行工具和file(ARCHIVE_EXTRACT)命令现在拒绝路径为绝对路径或包含..路径遍历组件的归档条目。cmake --trace系列及相关命令现在为控制结构打印 “end” 命令:endblock(),endforeach(),endfunction(),endif(),endmacro()和endwhile()。file(CREATE_LINK)命令的COPY_ON_ERROR选项,当与目录一起使用时,现在会复制目录内容。请参阅策略CMP0205。file(GET_RUNTIME_DEPENDENCIES)和install(RUNTIME_DEPENDENCY_SET)命令现在在匹配过滤器之前对路径进行规范化。请参阅策略CMP0207。cmake.org 上提供的预编译 Linux
aarch64二进制文件现在需要 GLIBC 2.28 或更高版本。在
cmake.org上为 macOS 10.13+ 提供的预编译 macOS 二进制文件,现在对于cmake-gui(1)应用程序需要 macOS 12 或更高版本。命令行工具仍然可以在 macOS 10.13 上运行。cmake.org 上提供的预编译 Windows 二进制文件现在需要 Windows 10 或更高版本。