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
和xrsimulator
SDK。可以通过将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
和xrsimulator
SDK。
3.28.5¶
此版本未对已记录的功能或接口进行任何更改。进行了一些实现更新以支持 C++ 模块。
3.28.6¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。