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 Compiler (NVCC) 为 NVIDIA GPU 编译
HIP语言代码。请参阅CMAKE_HIP_PLATFORM变量。
平台¶
在 Apple 平台上,现在支持
.xcframework文件夹find_library()命令现在可以找到.xcframework文件夹。target_link_libraries()命令现在支持链接到.xcframework文件夹。导入的库目标的
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 id为CrayClang。现在支持 OrangeC 编译器,其
compiler id为OrangeC。
命令¶
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_IMPLIB目标属性,而无需IMPORTED_LOCATION。这可用于表示一个存根库,其位置不应作为运行时搜索路径添加到链接它的依赖项中。macOS 框架的
IMPORTED_LOCATION属性现在可以是指向.framework文件夹本身的路径。添加了
XCODE_EMBED_RESOURCES目标属性,用于告知Xcode生成器应将哪些目标放在 “Embed Resources” 构建阶段。
模块¶
ExternalProject模块现在为ExternalProject_Add()命令包含了BUILD_JOB_SERVER_AWARE选项。当在使用特定 Makefile Generators 的显式BUILD_COMMAND时,此选项会启用 GNU Make 作业服务器的集成。此外,ExternalProject_Add_Step()命令已更新以支持新的JOB_SERVER_AWARE选项。FetchContent模块的FetchContent_Declare()命令增加了EXCLUDE_FROM_ALL选项,该选项会传播到add_subdirectory()语句,而该语句由FetchContent_MakeAvailable()为依赖项调用。FindCURL模块增加了CURL_USE_STATIC_LIBS提示,用于选择静态库。FindEXPAT模块增加了EXPAT_USE_STATIC_LIBS提示,用于选择静态库。FindPkgConfig模块的pkg_get_variable()命令增加了DEFINE_VARIABLES选项,用于将变量传递给pkg-config。
生成器表达式¶
generator expressions的$<IF:...>、$<AND:...>和$<OR:...>支持短路求值,以避免不必要的参数评估。
CTest¶
CTest 现在可以接受一个 动态生成的资源规范文件,该文件可以通过
GENERATED_RESOURCE_SPEC_FILE测试属性指定。
已弃用和移除的功能¶
自 CMake 3.0 起已弃用的
exec_program()命令已根据策略CMP0153被移除。请改用execute_process()命令。已移除
Visual Studio 11 2012生成器。Visual Studio 12 2013生成器现已弃用,将在 CMake 的未来版本中移除。目标属性
IOS_INSTALL_COMBINED和对应的变量CMAKE_IOS_INSTALL_COMBINED已被弃用。它们的功能在 Apple Silicon 主机上没有意义。Xcode生成器现在如果为 Xcode 14 及更新版本选择了 Legacy Build System,将发出致命错误。这些 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 支持已更新,以支持 Xcode 15.2 官方发布的
xros和xrsimulatorSDK。
3.28.5¶
此版本未对已记录的功能或接口进行任何更改。进行了一些实现更新以支持 C++ 模块。
3.28.6¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。