CMake 3.31 发行说明¶
CMake 3.30 以来的更改包括以下内容。
新增功能¶
预设¶
cmake-presets(7)
文件现在可以使用键$comment
在 JSON 对象中的任何级别包含注释以提供文档。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
支持。
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++ 模块编译命令。这仅受 忍者生成器 支持。添加了
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 使用来生成链接行的策略中。
属性¶
目标属性
MACOSX_FRAMEWORK_BUNDLE_NAME
已添加用于在 AppleFRAMEWORK
的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
步骤要求使用 TLS 1.2 或更高的版本来默认连接https://
URL。有关详情,请参阅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
。
弃用和删除的功能¶
与低于 3.10 的 CMake 版本兼容现在已弃用,并将从未来版本中删除。调用
cmake_minimum_required()
或cmake_policy()
将策略版本设置为旧值现在发出了弃用诊断。CMakeFindFrameworks
模块已弃用,请参阅CMP0173
。项目应该改为使用find_library()
。Visual Studio 12 2013
生成器已删除。
其他更改¶
在通过策略
CMP0156
取消连接行上的静态库的重复项后,第一个出现的项现在保留在所有平台上。参见策略CMP0179
。TEST_LAUNCHER
和CROSSCOMPILING_EMULATOR
目标属性中的空列表元素现在已被add_test()
命令保留了下来。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)
现在默认情况下需要 TLS 1.2 或更高版本才能连接到https://
网址。有关详细信息,请参见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
。