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]
选项,用于列出名称与正则表达式匹配的缓存条目。
编译器¶
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 生成器 时受支持。添加了
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 生成器
获得了CPACK_DEBIAN_PACKAGE_MULTIARCH
选项,以支持多架构软件包。CPack IFW 生成器
获得了新的CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS
变量,用于指定与CPACK_IFW_PACKAGE_PRODUCT_IMAGES
条目关联的图像。此功能适用于 QtIFW 4.0 及更高版本。CPack RPM 生成器
获得了对zstd
作为CPACK_RPM_COMPRESSION_TYPE
值的支持。CPack
模块默认在CPack WIX 生成器
中启用每机器安装。请参阅策略CMP0172
和CPACK_WIX_INSTALL_SCOPE
变量。
已弃用和移除的特性¶
与 CMake 3.10 之前版本的兼容性现在已弃用,并将在未来版本中移除。现在调用
cmake_minimum_required()
或cmake_policy()
将策略版本设置为较旧值的操作现在会发出弃用诊断信息。CMakeFindFrameworks
模块已通过CMP0173
弃用。项目应改用find_library()
。Visual Studio 12 2013
生成器已被移除。
其他更改¶
当链接行上的静态库被去重(通过策略
CMP0156
)时,现在在所有平台上都保留第一次出现的情况。请参阅策略CMP0179
。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
。现在,对于默认的
https://
URL 连接,file(DOWNLOAD)
和file(UPLOAD)
命令会验证 TLS 服务器证书。 详情请参阅CMAKE_TLS_VERIFY
变量。 此更改的实施没有通过策略,以便即使在构建未更新的项目时也能保护用户。 用户可以将CMAKE_TLS_VERIFY
环境变量设置为0
以恢复旧的默认行为。现在,对于默认的
https://
URL 连接,file(DOWNLOAD)
和file(UPLOAD)
命令默认需要 TLS 1.2 或更高版本。 详情请参阅CMAKE_TLS_VERSION
变量。file(GET_RUNTIME_DEPENDENCIES)
命令已更新,以更紧密地匹配 Linux 上动态加载程序的行为。install()
命令的DESTINATION
参数现在已 normalized (规范化),但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¶
这些版本未对已记录的功能或接口进行任何更改。 进行了一些实现更新以支持生态系统更改和/或修复回归。