CMake 3.28 发行说明¶
自 CMake 3.27 以来的更改包括以下内容。
新特性¶
语言¶
C++ 20 命名模块现在受 Ninja 生成器 和 Visual Studio 生成器 支持,用于 VS 2022 及更高版本,并结合 MSVC 14.34 工具集(随 VS 17.4 提供)及更高版本、LLVM/Clang 16.0 及更高版本,以及 GCC 14(在 2023-09-20 每日构建之后)及更高版本。有关详细信息,请参阅
cmake-cxxmodules(7)
。HIP
语言代码现在可以使用 NVIDIA CUDA 编译器 (NVCC) 为 NVIDIA GPU 编译。请参阅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)
文件现在支持模式版本8
。它增加了对$schema
字段的支持。
编译器¶
命令¶
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
选项。当将显式的BUILD_COMMAND
与某些 Makefile 生成器 结合使用时,此选项启用 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
。
生成器表达式¶
生成器 表达式
$<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 14 及更高版本选择了旧版构建系统,
Xcode
生成器现在将发出致命错误。这些 Xcode 版本放弃了对旧版构建系统的支持,并期望项目设置为其当前的构建系统。
其他更改¶
默认情况下,在使用 文件集 的目标中,生成的文件现在被视为私有。生成的公共标头必须使用文件集指定。这允许 Ninja 生成器 生成更高效的构建图。请参阅策略
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
和xrsimulator
SDK 的官方 Xcode 15.2 版本进行了更新。
3.28.5¶
此版本未对已记录的特性或接口进行任何更改。对 C++ 模块支持进行了一些实现更新。
3.28.6¶
此版本未对已记录的特性或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。