CMake 3.31 发行说明¶
自 CMake 3.30 以来的更改包括以下内容。
新功能¶
预设 (Presets)¶
cmake-presets(7)文件现在可以在 JSON 对象内的任何级别使用$comment键包含注释,以提供文档。cmake-presets(7)文件现在可以使用配置预设中的graphviz键请求 graphviz 输出。
生成器¶
Ninja Generators 和 Makefile Generators 现在会生成一个
codegen构建目标。请参阅策略CMP0171。它驱动足以运行使用add_custom_command()的新CODEGEN选项创建的自定义命令的构建图的子集。
命令行¶
cmake --workflow模式现在接受预设名称作为第一个参数,允许使用更简单的命令行cmake --workflow <preset>。添加了
cmake -LR[A][H]选项来列出名称与正则表达式匹配的缓存条目。
编译器¶
现在支持 LFortran 编译器,其
compiler id为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 Generators。添加了
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目标属性,用于在 Apple 的FRAMEWORK的Info.plist文件中设置CFBundleName键。UNITY_BUILD目标属性现在支持CUDA语言。添加了
VS_FRAMEWORK_REFERENCES目标属性,用于告知 Visual Studio Generators 添加框架引用。
模块¶
检查模块现在支持
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模块的ExternalData_Add_Test()命令。来自
GoogleTest模块的gtest_add_tests()和gtest_discover_tests()命令。这两个命令的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, 3.31.9¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。
3.31.10¶
execute_process()命令在其TIMEOUT到期时再次终止子进程。此行为在 CMake 3.29 中被意外回退。