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>变量已添加,用于将非 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过滤测试。对于 Visual Studio 生成器,模块
UseSWIG现在可以使用swig工具生成隐式依赖。
CTest¶
ctest(1)学习了如何识别在运行时附加到测试的标签。之前只能通过使用LABELS测试属性在配置时附加标签。有关更多信息,请参阅 其他测试测量。ctest(1)学习了通过ENVIRONMENT_MODIFICATION属性修改测试环境的能力。这允许根据测试时存在的环境更新环境变量。ctest_memcheck()命令现在还生成一个DynamicAnalysis-Test.xml文件,可用于将测试结果提交给 CDash。
CPack¶
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 的未来版本中移除。
其他更改¶
编译特性功能现在正确地禁用或启用编译器扩展(当未指定标准级别时),并避免在请求的设置与编译器的默认设置匹配时,不必要地添加语言标准标志。请参阅CMP0128。编译特性功能现在会忽略未启用的语言的特性。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 及更早版本一样。此 bug 在 3.22.0 中已修复,但暴露了现有项目中的错误。修复已回滚以恢复兼容性。此修复可能会在未来版本的 CMake 中通过策略恢复。
3.22.4, 3.22.5, 3.22.6¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。