CMake 3.24 发行说明¶
自 CMake 3.23 以来的更改包括以下内容。
新功能¶
预设¶
cmake-presets(7)文件现在支持 schema 版本5。cmake-presets(7)文件现在支持${pathListSep}宏,它根据平台展开为:或;。cmake-presets(7)文件增加了在测试预设中指定testOutputTruncation字段的支持,该字段指定了达到最大测试输出大小时的截断模式。
生成器¶
生成器
Green Hills MULTI现在会生成构建规则,以在任何 CMake 文件更新时重新运行 CMake。使用 VS 2019 Update 11 或更高版本时,Visual Studio 生成器 现在支持
SYSTEM头文件。
命令行¶
cmake(1)增加了--fresh命令行选项,用于在配置构建树时删除任何现有的CMakeCache.txt文件和相关的CMakeFiles/目录,从而像构建树刚创建时一样开始新的配置。cmake(1)增加了--compile-no-warning-as-error命令行选项,该选项会忽略COMPILE_WARNING_AS_ERROR目标属性和CMAKE_COMPILE_WARNING_AS_ERROR变量的效果。cmake(1)--trace=json-v1跟踪格式增加了global_frame和line_end字段。cmake(1)的-E命令cat和env学习到了如何识别双破折号 (--) 参数,该参数用作分隔符,表示选项的结束。任何后续参数都将被视为操作数/位置参数,即使它们以破折号-开头。cmake(1)的-E tar命令增加了--touch选项,以保留当前本地时间戳,而不是从归档中提取文件时间戳。
编译器¶
LLVM 的 flang Fortran 编译器现在在某些平台上得到支持,编译器 ID 为
LLVMFlang。
ADSP 编译器支持(SHARC 和 Blackfin)现在涵盖 CCES 和 VDSP++ 安装,所需的配置现在由编译器模块本身完成,而不是在
Generic-ADSP平台模块中。
平台¶
添加了一个专用的
ADSP平台来替代现有的Generic-ADSP实现。它具有自动检测最新 CCES/VDSP++ 安装和编译器选择(cc21kvsccblkfn)的功能,具体取决于CMAKE_SYSTEM_PROCESSOR变量。
命令¶
在 Windows 上,
cmake_host_system_information()命令增加了一个QUERY WINDOWS_REGISTRY模式。请参阅其 查询 Windows 注册表 部分。cmake_language()命令增加了一个新的SET_DEPENDENCY_PROVIDER子命令。当设置了依赖提供程序时,对find_package()和FetchContent_MakeAvailable()的调用可以通过自定义命令进行重定向,该命令可以选择直接满足请求、修改请求的处理方式,或将其留给内置实现来处理。请参阅 依赖提供程序。file(DOWNLOAD)命令增加了RANGE_START和RANGE_END选项来指定要下载的字节范围。这对于下载大型二进制文件的一部分非常有用。find_file()、find_path()、find_library()、find_program()和find_package()命令增加了NO_CMAKE_INSTALL_PREFIX选项来控制搜索CMAKE_INSTALL_PREFIX。find_file()、find_path()、find_library()、find_program()和find_package()命令增加了指定必须查询哪些 Windows 注册表视图的能力。find_package()命令增加了GLOBAL选项,该选项允许在find_package()调用期间将导入的目标提升到全局范围。
变量¶
添加了
CMAKE_COLOR_DIAGNOSTICS变量来控制编译器生成的彩色诊断信息。该变量还使用 Makefile 生成器 控制彩色构建系统消息,取代了CMAKE_COLOR_MAKEFILE。添加了
CMAKE_COLOR_DIAGNOSTICS环境变量,用于为CMAKE_COLOR_DIAGNOSTICS设置默认值。添加了
CMAKE_COMPILE_WARNING_AS_ERROR变量和相应的COMPILE_WARNING_AS_ERROR目标属性,用于启用使用特定编译器标志将警告视为错误进行编译,例如-Werror。CMAKE_CUDA_ARCHITECTURES变量和相关的CUDA_ARCHITECTURES目标属性现在支持特殊的native值,用于为主机的 GPU 编译。添加了
CMAKE_FIND_PACKAGE_TARGETS_GLOBAL变量,用于切换find_package()命令新的GLOBAL选项的行为。添加了
CMAKE_FIND_USE_INSTALL_PREFIX变量,用于切换find_file()、find_library()、find_path()、find_package()和find_program()命令新的NO_CMAKE_INSTALL_PREFIX选项的行为。添加了
CMAKE_PROJECT_TOP_LEVEL_INCLUDES变量,允许在第一个project()调用处(在确定了主机和目标平台详细信息之后)注入自定义代码。添加了
CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES变量,用于告诉try_compile()命令不要将任何平台变量传递给测试项目。添加了
CMAKE_VERIFY_INTERFACE_HEADER_SETS变量和相应的VERIFY_INTERFACE_HEADER_SETS目标属性,用于启用验证所有头集中的头文件可以独立使用的构建规则。添加了
CMAKE_VS_NO_COMPILE_BATCHING变量和相应的VS_NO_COMPILE_BATCHING目标属性,用于告知 Visual Studio 生成器 是否禁用编译器并行性,一次一个源文件调用编译器。引入了
CMAKE_WATCOM_RUNTIME_LIBRARY变量和WATCOM_RUNTIME_LIBRARY目标属性,用于选择针对 Watcom ABI 的编译器使用的运行时库。请参阅策略CMP0136。添加了
CMAKE_XCODE_XCCONFIG变量和相应的XCODE_XCCONFIG目标属性,以告知Xcode生成器处理xcconfig文件。
属性¶
添加了
INTERFACE_LINK_LIBRARIES_DIRECT和INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE目标属性,用于表达影响消费者直接链接依赖项的使用要求。添加了
INTERFACE_HEADER_SETS_TO_VERIFY目标属性,用于指定应由VERIFY_INTERFACE_HEADER_SETS验证的头集。LINK_LIBRARIES目标属性现在支持$<LINK_ONLY:...>生成器表达式。请参阅策略CMP0131。添加了
VS_DOTNET_STARTUP_OBJECT目标属性,用于在程序或项目执行时告知 Visual Studio 生成器 使用哪个启动类。当托管 .NET 项目中有多个static void Main(string[])函数签名时,这是必需的。
模块¶
ExternalProject模块ExternalProject_Add()命令增加了新的DOWNLOAD_EXTRACT_TIMESTAMP选项,用于控制在使用URL下载方法时,提取内容的时间戳是否设置为与归档中的匹配。添加了策略CMP0135以默认启用该选项。FetchContent模块和find_package()命令现在支持集成功能。FetchContent_MakeAvailable()现在可以先调用find_package()来尝试满足依赖。新的只读变量FETCHCONTENT_TRY_FIND_PACKAGE_MODE控制默认情况下是否对所有依赖项执行此操作、按依赖项选择加入,还是完全禁用。find_package()可以被重路由以调用FetchContent_MakeAvailable()。新的只读变量CMAKE_FIND_PACKAGE_REDIRECTS_DIR指向一个可以放置 config 包文件的目录,以方便这些重路由的调用。
FindJNI模块现在提供导入的目标。FindMatlab模块的matlab_add_mex()函数增加了NO_IMPLICIT_LINK_TO_MATLAB_LIBRARIES选项,以禁用对 MATLAB 库的自动链接。FindVulkan模块现在支持组件,用于选择除 Vulkan SDK 头文件和库之外,还要查找哪些 VulkanSDK 工具和库。FindZLIB增加了一个新的变量ZLIB_USE_STATIC_LIBS,用于只搜索静态库。
生成器表达式¶
添加了
LINK_LIBRARY生成器表达式来管理链接步骤中库的指定方式。变量CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>和CMAKE_LINK_LIBRARY_USING_<FEATURE>用于定义LINK_LIBRARY生成器表达式可用的功能。此外,还提供了LINK_LIBRARY_OVERRIDE和LINK_LIBRARY_OVERRIDE_<LIBRARY>目标属性来解决不兼容的功能。当针对
Apple平台进行链接时,LINK_LIBRARY生成器表达式可以以各种方式链接框架。添加了以下功能:FRAMEWORKNEEDED_FRAMEWORKREEXPORT_FRAMEWORKWEAK_FRAMEWORK
当针对
Apple平台进行链接时,LINK_LIBRARY生成器表达式可以以各种方式链接库。添加了以下功能:NEEDED_LIBRARYREEXPORT_LIBRARYWEAK_LIBRARY
LINK_LIBRARY生成器表达式增加了WHOLE_ARCHIVE功能,用于强制加载静态库中的所有成员。此功能在以下目标平台上受支持:所有
Apple变体Linux所有
BSD变体SunOSWindowsCYGWINMSYS
添加了
LINK_GROUP生成器表达式来管理链接步骤中的库分组。变量CMAKE_<LANG>_LINK_GROUP_USING_<FEATURE>和CMAKE_LINK_GROUP_USING_<FEATURE>用于定义LINK_GROUP生成器表达式可用的功能。此版本定义了RESCAN功能,可用于处理 Linux、BSD、SunOS 和 Windows 的 GNU 工具链等工具链在静态库之间的循环引用。添加了
PATH生成器表达式来管理路径。添加了
PATH_EQUAL生成器表达式来管理路径比较。添加了
TARGET_BUNDLE_DIR_NAME生成器表达式,用于评估给定 bundle 目标的应用目录名称。
CTest¶
ctest(1)增加了--test-output-truncation选项(以及相应的CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION变量)来指定达到最大测试输出大小时的截断模式。可能的值为tail(默认)、middle或head。
CPack¶
CPack WIX Generator增加了一个新变量CPACK_WIX_ARCHITECTURE,用于指定安装程序的架构,以支持运行 Windows for ARM 的计算机。CPack 现在支持
zstd压缩的CPACK_THREADS选项,前提是使用 libarchive 3.6 或更高版本编译。官方 CMake 二进制文件在 cmake.org 上可用,支持此选项。
已弃用和已移除的功能¶
CPack模块在CPack DragNDrop Generator中不再默认启用 SLA。请参阅策略CMP0133和CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE变量。已弃用的
CPack PackageMaker Generator已被移除。FindGLUT模块不再提供未记录的GLUT_LIBRARY和GLUT_INCLUDE_PATH结果变量。FindVulkan模块不再静默忽略find_package(Vulkan REQUIRED ...)调用请求的未知组件。随着对组件支持的增加,对未知组件的请求现在会产生错误。
其他更改¶
CMake 在构建目录中的第一次 CMake 运行时,不再设置像
CC、CXX等环境变量。请参阅策略CMP0132。CheckIPOSupported模块的check_ipo_supported()命令现在使用调用方的CMAKE_<LANG>_FLAGS和CMAKE_<LANG>_FLAGS_<CONFIG>值。请参阅策略CMP0138。生成器
MSYS Makefiles和MinGW Makefiles,当未显式指定编译器时,现在会选择PATH环境变量列出的目录中找到的第一个编译器(不限名称)。try_compile()命令的 整个项目 签名现在会传播平台变量。请参阅策略CMP0137。在 cmake.org 上提供的预编译 macOS 二进制文件不再将 SLA 附加到
.dmg包。这是因为 macOS 12 已弃用用于附加.dmg资源的工具。在 cmake.org 上提供了预编译的 Windows
arm64二进制文件。
更新¶
自 CMake 3.24.0 以来的更改包括以下内容。
3.24.1, 3.24.2¶
这些版本未对已记录的功能或接口进行任何更改。为了支持生态系统更改和/或修复回归,进行了一些实现更新。
3.24.3¶
3.24.0 中添加的
LLVMFlangFortran 编译器支持已得到扩展:它现在支持 Fortran 与 C 或 CXX 之间的混合语言链接。
它现在支持 Windows 上的 GNU ABI(MinGW),但尚未支持 MSVC ABI。
进行了一些实现更新,以支持生态系统更改和/或修复回归。
3.24.4¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。