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 的未来版本中移除。
其他更改¶
Compile Features
功能现在可以在未指定标准级别时正确禁用或启用编译器扩展,并避免在请求的设置与编译器的默认设置匹配时,不必要地添加语言标准标志。请参阅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¶
这些版本未对已记录的特性或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。