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¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。