CMake 3.22 发行说明¶
自 CMake 3.21 以来的更改包括以下内容。
新功能¶
命令¶
cmake_host_system_information()命令现在可以查询 OS 标识变量 从/etc/os-release文件中。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>变量,用于将非 REQUIRED 的find_package()调用变为 REQUIRED 调用。
属性¶
<LANG>_EXTENSIONS目标属性现在初始化为CMAKE_<LANG>_EXTENSIONS_DEFAULT,从编译器检测。参见CMP0128。VS_SETTINGS源文件属性现在支持所有源文件类型。之前它仅对非构建源有效。
模块¶
CMakeDependentOption模块的cmake_dependent_option()命令现在支持完整的 条件语法。参见策略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过滤测试。UseSWIG模块,对于 Visual Studio 生成器,现在可以使用swig工具生成隐式依赖。
CTest¶
ctest(1)学习了在运行时识别附加到测试的标签。之前只能通过使用LABELS测试属性在配置时附加标签。更多信息请参见 附加测试测量。ctest(1)学习了通过ENVIRONMENT_MODIFICATION属性修改测试环境。这允许根据测试时存在的环境更新环境变量。ctest_memcheck()命令现在还生成一个DynamicAnalysis-Test.xml文件,可用于将测试结果提交到 CDash。
CPack¶
CPack DEB 生成器增加了设置CPACK_DEBIAN_COMPRESSION_TYPE为zstd的选项,这使得 deb 包支持 Zstandard 压缩。CPack NSIS 生成器增加了一个新的CPACK_NSIS_IGNORE_LICENSE_PAGE变量,用于在安装程序中抑制许可证页面。CPack RPM 生成器增加了CPACK_RPM_REQUIRES_EXCLUDE_FROM选项,以避免扫描特定路径的依赖项。
已弃用和移除的功能¶
Visual Studio 10 2010生成器现已弃用,将在 CMake 的未来版本中移除。
其他更改¶
编译 特性功能现在在未指定标准级别时正确禁用或启用编译器扩展,并避免在请求的设置与编译器的默认设置匹配时,不必要地添加语言标准标志。参见CMP0128。编译 特性功能现在会忽略未启用语言的特性。Ninja和NMake Makefiles生成器现在使用 MSVC 的-external:I标志用于系统包含。这从 VS 16.10(工具链版本 14.29.30037)开始可用。CPack NSIS 生成器现在要求 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¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。