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]选项,用于列出名称与正则表达式匹配的缓存条目。
编译器¶
现在通过
编译器 IDLFortran支持 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¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。