CMake 3.28 发行说明¶
自 CMake 3.27 起所做的更改包括以下内容。
新功能¶
语言¶
现在,C++ 20 命名模块受 Ninja 生成器 和针对较新版本的 VS 2022、结合 MSVC 14.34 工具集(随 VS 17.4 提供)以及较新版本的 LLVM/Clang 16.0 和较新版本的 GCC 14(在 2023-09-20 日常更新之后)的 Visual Studio 生成器 支持。请参阅
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
字段的支持。
编译器¶
Cray Clang-based 编译器现受
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
选项。当将明确的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
。
生成器表达式¶
Generator 表达式
generator expressions
、$<IF:...>
、$<AND:...>
和$<OR:...>
短路避免不必要的参数评估。
CTest¶
CTest 现在可以接受 动态生成资源规范文件,该文件可以通过
GENERATED_RESOURCE_SPEC_FILE
测试属性指定。
弃用和删除的功能¶
exec_program()
命令自 CMake 3.0 起已弃用,现已通过策略CMP0153
删除。请改用execute_process()
命令。Visual Studio 11 2012
生成器已删除。Visual Studio 12 2013
生成器现已弃用,并将在未来版本的 CMake 中删除。IOS_INSTALL_COMBINED
目标属性和对应的CMAKE_IOS_INSTALL_COMBINED
变量已弃用。它们的功能在 Apple Silicon 主机上没有意义。Xcode
生成器现在将在为 Xcode 14 及更新版本选择了旧版构建系统时发出致命错误。这些版本的 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
目录。非 Windows 平台的行为已由 CMake 3.6 恢复。现在它也在 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¶
已针对
xros
和xrsimulator
SDK 的 Xcode 15.2 正式版本更新了 Apple visionOS 支持。
3.28.5¶
此版本未对记录的要素或界面进行任何更改。对 C++ 模块支持进行了一些实现更新。
3.28.6¶
此版本未对记录的要素或界面进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。