CMake 3.31 发行说明¶
自 CMake 3.30 以来的更改包括以下内容。
新功能¶
预设¶
cmake-presets(7)
文件现在可以在 JSON 对象内的任何级别使用$comment
键来包含注释,以提供文档。cmake-presets(7)
文件现在可以使用配置预设中的graphviz
键请求 Graphviz 输出。
生成器¶
Ninja 生成器 和 Makefile 生成器 现在会生成一个
codegen
构建目标。请参阅策略CMP0171
。它驱动了足够子集的构建图,以运行通过add_custom_command()
的新CODEGEN
选项创建的自定义命令。
命令行¶
cmake --workflow
模式现在接受预设名称作为第一个参数,从而允许使用更简单的命令行cmake --workflow <preset>
。添加了
cmake -LR[A][H]
选项,用于列出名称与正则表达式匹配的缓存条目。
编译器¶
现在通过
编译器 ID
LFortran
支持 LFortran 编译器。
命令¶
add_custom_command()
命令新增了CODEGEN
选项,用于将自定义命令的输出标记为codegen
目标的依赖项。请参阅策略CMP0171
。cmake_pkg_config()
命令被添加为使用 CMake 原生 pkg-config 格式解析器的端点。此版本中唯一支持的选项是EXTRACT
,它提供对解析 pkg-config 文件产生的值的低级访问。对于大多数用户来说,这仍然不是FindPkgConfig
模块的合适替代品。file(ARCHIVE_CREATE)
命令新增了WORKING_DIRECTORY
选项,用于为归档过程指定工作目录。file(MAKE_DIRECTORY)
命令新增了RESULT
选项,用于将失败捕获到结果变量中。install(FILES)
和install(DIRECTORY)
命令的TYPE
参数新增了对LIBEXEC
类型的支持。
变量¶
添加了
CMAKE_AIX_SHARED_LIBRARY_ARCHIVE
变量和相应的AIX_SHARED_LIBRARY_ARCHIVE
目标属性,以在 AIX 上将共享库创建为共享库存档。添加了
CMAKE_EXPORT_BUILD_DATABASE
变量、相应的CMAKE_EXPORT_BUILD_DATABASE
环境变量以及EXPORT_BUILD_DATABASE
目标属性,以启用导出 C++ 模块编译命令。这仅支持 Ninja 生成器。添加了
CMAKE_HOST_EXECUTABLE_SUFFIX
变量,用于提供主机平台上可执行文件名的后缀。添加了
CMAKE_<LANG>_HOST_COMPILER_ID
和CMAKE_<LANG>_HOST_COMPILER_VERSION
变量,其中<LANG>
为CUDA
或HIP
。当CMAKE_<LANG>_COMPILER_ID
为NVIDIA
时,会填充这些变量以标识 NVCC 的主机编译器。添加了
CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES
变量。工具链文件可以设置此变量,以控制为指定语言始终传递给编译器的链接库目录路径。添加了
CMAKE_LINK_LIBRARIES_STRATEGY
变量和相应的LINK_LIBRARIES_STRATEGY
目标属性,以可选地指定 CMake 用于生成链接行的策略。添加了
CMAKE_CONFIG_DIR
环境变量,用于为cmake-file-api(7)
查询指定 CMake 用户级配置目录。
属性¶
添加了
MACOSX_FRAMEWORK_BUNDLE_NAME
目标属性,用于在 AppleFRAMEWORK
的Info.plist
文件中设置CFBundleName
键。UNITY_BUILD
目标属性现在支持CUDA
语言。添加了
VS_FRAMEWORK_REFERENCES
目标属性,用于告知 Visual Studio 生成器 添加框架引用。
模块¶
检查模块现在支持
CMAKE_REQUIRED_LINK_DIRECTORIES
变量。以下模块获得了此支持:CMakePackageConfigHelpers
模块的generate_apple_platform_selection_file()
函数新增了对 iOS Mac Catalyst 的支持。GoogleTest
模块的gtest_discover_tests()
命令新增了一个DISCOVERY_EXTRA_ARGS
关键字。它允许在查询测试列表时将额外参数附加到命令行。FindCUDAToolkit
模块现在提供了CUDA::nvml_static
目标。FindOpenMP
模块新增了对CUDA
语言的支持。
CTest¶
ctest_submit()
命令和ctest -T Submit
步骤现在默认会验证到https://
URL 的连接的 TLS 服务器证书。有关详细信息,请参阅CTEST_TLS_VERIFY
变量。ctest_submit()
命令和ctest -T Submit
步骤现在默认要求到https://
URL 的连接使用 TLS 1.2 或更高版本。有关详细信息,请参阅CTEST_TLS_VERSION
变量。
CPack¶
CPack DEB Generator
新增了CPACK_DEBIAN_PACKAGE_MULTIARCH
选项,以支持多架构包。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS
变量,用于指定与CPACK_IFW_PACKAGE_PRODUCT_IMAGES
条目关联的图像。此功能适用于 QtIFW 4.0 及更高版本。CPack RPM Generator
新增了对zstd
作为CPACK_RPM_COMPRESSION_TYPE
值 的支持。CPack
模块在CPack WIX Generator
中默认启用按计算机安装。请参阅策略CMP0172
和CPACK_WIX_INSTALL_SCOPE
变量。
已弃用和已移除的功能¶
与 CMake 3.10 之前的版本的兼容性现已弃用,并将在未来版本中移除。调用
cmake_minimum_required()
或cmake_policy()
将策略版本设置为旧值现在会发出弃用诊断。CMakeFindFrameworks
模块已通过CMP0173
弃用。项目应改用find_library()
。已移除
Visual Studio 12 2013
生成器。
其他更改¶
在
TEST_LAUNCHER
和CROSSCOMPILING_EMULATOR
目标属性中的空列表元素现在会被以下命令保留:命令
add_test()
。ExternalData_Add_Test()
命令来自ExternalData
模块。gtest_add_tests()
和gtest_discover_tests()
命令来自GoogleTest
模块。这两个命令的EXTRA_ARGS
关键字后面的空列表元素现在也得到了保留。
请参阅策略
CMP0178
。命令
execute_process()
的ENCODING
选项在 Windows 上有意义,现在默认值为UTF-8
。请参阅策略CMP0176
。命令
file(DOWNLOAD)
和file(UPLOAD)
现在默认会验证到https://
URL 的连接的 TLS 服务器证书。有关详细信息,请参阅CMAKE_TLS_VERIFY
变量。此更改是在没有策略的情况下进行的,以便用户即使在构建未更新的项目时也能受到保护。用户可以通过将CMAKE_TLS_VERIFY
环境变量设置为0
来恢复旧的默认设置。命令
file(DOWNLOAD)
和file(UPLOAD)
现在默认要求到https://
URL 的连接使用 TLS 1.2 或更高版本。有关详细信息,请参阅CMAKE_TLS_VERSION
变量。命令
file(GET_RUNTIME_DEPENDENCIES)
已更新,以更接近地匹配 Linux 上的动态加载器行为。命令
install()
的DESTINATION
参数现在会 标准化,但install(TARGETS)
中的INCLUDES DESTINATION
参数除外。请参阅策略CMP0177
。命令
project()
现在始终将<PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和<PROJECT-NAME>_IS_TOP_LEVEL
设置为常规变量和缓存条目。请参阅策略CMP0180
。命令
cmake_parse_arguments(PARSE_ARGV)
现在会在单值关键字之后定义一个空字符串变量。请参阅策略CMP0174
。
更新¶
自 CMake 3.31.0 以来的更改包括以下内容。
3.31.1, 3.31.2, 3.31.3, 3.31.4, 3.31.5, 3.31.6, 3.31.7, 3.31.8¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。