CMake 3.22 发行说明¶
自 CMake 3.21 以来所做的更改包括以下内容。
新功能¶
命令¶
cmake_host_system_information()命令现在可以从/etc/os-release文件中查询`OS 标识变量`_。string(TIMESTAMP)命令现在支持 ISO 8601 周数的%V说明符。
变量¶
添加了
CMAKE_BUILD_TYPE环境变量以为CMAKE_BUILD_TYPE变量提供默认值。添加了
CMAKE_CONFIGURATION_TYPES环境变量以为CMAKE_CONFIGURATION_TYPES变量提供默认值。添加了
CMAKE_INSTALL_MODE环境变量来告诉install()规则(由file(INSTALL)实现)安装符号链接而不是复制文件。添加了
CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG和CMAKE_LINK_WHAT_YOU_USE_CHECK变量来控制链接器标志并检查LINK_WHAT_YOU_USE目标属性。添加了
CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>变量以将非必需的find_package()调用转换为必需的调用。
特性¶
<LANG>_EXTENSIONS目标属性现在初始化为CMAKE_<LANG>_EXTENSIONS_DEFAULT,从编译器中检测到。请参阅:policy:CMP0128。VS_SETTINGS源文件属性现在支持所有源文件类型。以前它只适用于非构建源。
模块¶
CMakeDependentOption模块cmake_dependent_option()宏现在支持完整的 条件语法。请参阅政策:policy:CMP0127。FetchContent 模块现在通过 CMAKE_TLS_VERIFY、CMAKE_TLS_CAINFO、CMAKE_NETRC 和 CMAKE_NETRC_FILE 变量(定义时)传递给底层模块: ExternalProject 子构建。以前,这些变量被
FetchContent默默地忽略了。FindBLAS 和 FindLAPACK 模块获得了 BLA_SIZEOF_INTEGER 选项来查找 ABI 使用特定整数大小的 BLAS/LAPACK。
FindJasper模块现在提供了一个导入的目标。FindMatlab 模块现在提供导入的目标。
FindPkgConfig模块获得了一个PKG_CONFIG_ARGN变量来指定pkg-config调用的参数。GoogleTest模块gtest_discover_tests()函数获得了一个TEST_FILTER选项,可以在测试发现期间使用--gtest_filter过滤测试。Visual Studio 生成器 的
UseSWIG模块现在可以使用swig工具生成隐式依赖项。
C测试¶
ctest(1)学会了在运行时识别附加在测试上的标签。以前只能在配置时使用LABELS测试属性将标签附加到测试。有关更多信息,请参阅 附加测试测量 。ctest(1)学会了能够通过ENVIRONMENT_MODIFICATION属性修改测试环境。这允许根据测试时存在的环境更新环境变量。ctest_memcheck()命令现在还会生成一个DynamicAnalysis-Test.xml文件,可用于将测试结果提交给 CDash。
包装¶
CPack DEB Generator获得了将CPACK_DEBIAN_COMPRESSION_TYPE设置为zstd的选项,这为 deb 包启用了 Zstandard 压缩。CPack NSIS Generator获得了一个新的CPACK_NSIS_IGNORE_LICENSE_PAGE变量来抑制安装程序中的许可页面。CPack RPM Generator获得了CPACK_RPM_REQUIRES_EXCLUDE_FROM选项以避免扫描依赖项的特定路径。
弃用和删除的功能¶
Visual Studio 10 2010生成器现已弃用,并将在未来版本的 CMake 中删除。
其他变化¶
Compile Features功能现在可以在未指定标准级别时正确禁用或启用编译器扩展,并避免在请求的设置与编译器的默认设置匹配时不必要地添加语言标准标志。请参阅:policy:CMP0128。Compile Features功能现在忽略未启用语言的功能。Ninja和NMake Makefiles生成器现在使用 MSVC-external:I标志进行系统包含。这从 VS 16.10(工具链版本 14.29.30037)开始可用。CPack NSIS Generator现在需要 NSIS 3.03 或更高版本。
更新¶
自 CMake 3.22.0 以来所做的更改包括以下内容。
3.22.1¶
此版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。
3.22.2¶
CMP0128的OLD行为被修复为添加标志,即使指定的标准与编译器默认值匹配。
3.22.3¶
while()命令再次像 CMake 3.21 及更低版本那样忽略条件评估中的错误。此错误在 3.22.0 中已修复,但在现有项目中暴露了错误。该修复程序已恢复以恢复兼容性。该修复程序可能会通过策略在未来版本的 CMake 中恢复。
3.22.4、3.22.5、3.22.6¶
这些版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。