CMake 3.22 发行说明¶
自 CMake 3.21 以来进行的变更包括以下内容。
新功能¶
命令¶
现在,
cmake_host_system_information()
命令可从/etc/os-release
文件查询 操作系统标识变量。现在,
string(TIMESTAMP)
命令支持%V
标志,用于 ISO 8601 星期数。
变量¶
已添加
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 生成器
新添加选项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 及更早版本所做的那样。此错误在 3.22.0 中得到修复,但导致现有项目中出现错误。已还原此修复以恢复兼容性。此修复可能会通过策略在未来版本的 CMake 中恢复。
3.22.4、3.22.5、3.22.6¶
这些版本未对记录的功能或界面做出任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。