CMake 3.28 发行说明¶
自 CMake 3.27 以来的更改包括以下内容。
新功能¶
语言¶
C++ 20 命名模块现已通过 Ninja Generators 和 Visual Studio Generators(适用于 VS 2022 及更新版本)支持,结合 MSVC 14.34 工具集(随 VS 17.4 提供)及更新版本、LLVM/Clang 16.0 及更新版本,以及 GCC 14(在 2023-09-20 的每日构建后)及更新版本。有关详细信息,请参阅
cmake-cxxmodules(7)。现在可以使用 NVIDIA CUDA 编译器 (NVCC) 为 NVIDIA GPU 编译
HIP语言代码。请参阅CMAKE_HIP_PLATFORM变量。
平台¶
在 Apple 平台上,现在支持
.xcframework文件夹。现在
find_library()命令可以找到.xcframework文件夹。现在
target_link_libraries()命令支持链接到.xcframework文件夹。导入的库目标(imported library target)的
IMPORTED_LOCATION目标属性现在可以是.xcframework文件夹的路径。
Apple visionOS 及其
xros和xrsimulatorSDK 现在已得到支持。可以通过将CMAKE_SYSTEM_NAME设置为visionOS来请求编译 Apple visionOS。有关更多信息,请参阅 为 iOS、tvOS、visionOS 或 watchOS 进行交叉编译。
预设¶
cmake-presets(7)文件现在支持 schema 版本8。它增加了对$schema字段的支持。
编译器¶
Cray Clang 编译器现已通过
compiler idCrayClang得到支持。OrangeC 编译器现已通过
compiler idOrangeC得到支持。
命令¶
add_custom_command()和add_custom_target()命令增加了JOB_SERVER_AWARE选项。cmake_host_system_information()命令增加了一个MSYSTEM_PREFIX查询,用于获取 Windows 主机上 MSYS 或 MinGW 开发环境的安装前缀。set_property()命令的TEST模式增加了DIRECTORY选项,用于在其他目录的测试上设置属性。set_tests_properties()命令增加了DIRECTORY选项,用于在其他目录的测试上设置属性。get_property()命令的TEST模式增加了DIRECTORY选项,用于在其他目录的测试上获取属性。get_test_property()命令增加了DIRECTORY选项,用于在其他目录的测试上获取属性。
变量¶
增加了
CMAKE_CROSSCOMPILING_EMULATOR环境变量,用于初始化CMAKE_CROSSCOMPILING_EMULATOR缓存变量。增加了
CMAKE_HIP_PLATFORM变量,用于指定编译 HIP 语言源文件的 GPU 平台(amd或nvidia)。
属性¶
对于导入的共享库,现在可以在不使用
IMPORTED_LOCATION的情况下使用IMPORTED_IMPLIB目标属性。这可以用于表示一个桩库(stub library),其位置不应被添加为链接它的依赖项的运行时搜索路径。macOS 框架的
IMPORTED_LOCATION属性现在可以是.framework文件夹本身的路径。增加了
XCODE_EMBED_RESOURCES目标属性,用于告知Xcode生成器哪些目标应放入“Embed Resources”构建阶段。
模块¶
ExternalProject模块现在为ExternalProject_Add()命令包含了BUILD_JOB_SERVER_AWARE选项。当使用显式BUILD_COMMAND和某些 Makefile Generators 时,此选项可以启用 GNU Make 作业服务器的集成。此外,ExternalProject_Add_Step()命令已更新以支持新的JOB_SERVER_AWARE选项。FetchContent模块的FetchContent_Declare()命令增加了一个EXCLUDE_FROM_ALL选项,该选项会传播到FetchContent_MakeAvailable()为依赖项调用add_subdirectory()时。FindCURL模块增加了一个CURL_USE_STATIC_LIBS提示,用于选择静态库。FindEXPAT模块增加了一个EXPAT_USE_STATIC_LIBS提示,用于选择静态库。FindPkgConfig模块的pkg_get_variable()命令增加了一个DEFINE_VARIABLES选项,用于将变量传递给pkg-config。
生成器表达式¶
生成器表达式$<IF:...>、$<AND:...>和$<OR:...>现在会进行短路(short-circuit)评估,以避免不必要的参数评估。
CTest¶
CTest 现在可以接受一个 动态生成的资源规范文件,该文件可以通过
GENERATED_RESOURCE_SPEC_FILE测试属性指定。
已弃用和移除的功能¶
根据策略
CMP0153,自 CMake 3.0 起已弃用的exec_program()命令已被移除。请改用execute_process()命令。已移除
Visual Studio 11 2012生成器。Visual Studio 12 2013生成器现已弃用,并将在 CMake 的未来版本中移除。已弃用
IOS_INSTALL_COMBINED目标属性和相应的CMAKE_IOS_INSTALL_COMBINED变量。它们的功能在 Apple Silicon 主机上没有意义。对于 Xcode 14 及更新版本,如果选择了 Legacy Build System,
Xcode生成器现在将发出致命错误。这些 Xcode 版本已放弃对 Legacy Build System 的支持,并期望项目设置为其当前 Build System。
其他更改¶
使用 File Sets 的目标中的生成文件,默认情况下被视为私有。公共生成头文件必须使用文件集来指定。这允许 Ninja Generators 生成更高效的构建图。请参阅策略
CMP0154。find_library()、find_path()和find_file()命令不再搜索从PATH环境变量派生的安装前缀。此行为在 CMake 3.3 中添加,以支持 Windows 上的 MSYS 和 MinGW (MSYSTEM) 开发环境,但它可能会搜索在PATH中碰巧存在的、但出于无关原因的非预期前缀。用户将一些<prefix>/bin目录仅出于工具目的保留在PATH中,不一定希望搜索相应的<prefix>/lib或<prefix>/include目录。此行为在 CMake 3.6 中已恢复为非 Windows 平台。现在,它也已在 Windows 平台上恢复。可以使用包含要搜索的前缀的 分号分隔列表 来设置
CMAKE_PREFIX_PATH环境变量。当在 Windows 上的
MSYSTEM环境中使用 MinGW 工具时,现在会将$MSYSTEM_PREFIX/local和$MSYSTEM_PREFIX前缀添加到CMAKE_SYSTEM_PREFIX_PATH。在 cmake.org 上提供的预编译 Linux
x86_64二进制文件现在需要 GLIBC 2.17 或更高版本。
更新¶
自 CMake 3.28.0 以来的更改包括以下内容。
3.28.1, 3.28.2, 3.28.3¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。
3.28.4¶
Apple visionOS 支持已针对
xros和xrsimulatorSDK 的 Xcode 15.2 正式版进行了更新。
3.28.5¶
此版本未对已记录的功能或接口进行任何更改。对 C++ 模块支持进行了一些实现更新。
3.28.6¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。