CMake 3.24 发行说明¶
自 CMake 3.23 以来所做的更改包括以下内容。
新功能¶
预设¶
cmake-presets(7)文件现在支持架构版本5。cmake-presets(7)文件现在支持${pathListSep}宏,它根据平台扩展为:或;。cmake-presets(7)文件获得了对在测试预设中指定testOutputTruncation字段的支持,该字段指定一旦达到最大测试输出大小时的截断模式。
生成器¶
Green Hills MULTI生成器现在生成构建规则以在任何 CMake 文件更新时重新运行 CMake。Visual Studio 生成器 现在在使用 VS 2019 Update 11 或更高版本时支持``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学会了遵守双破折号 (--) 参数,它充当指示选项结束的分隔符。任何后续参数都被视为操作数/位置参数,即使它们以破折号“-”字符开头。
编译器¶
LLVM 的 flang Fortran 编译器现在在某些平台上受支持,编译器 ID 为
LLVMFlang。
ADSP 编译器支持(SHARC 和 Blackfin)现在涵盖 CCES 和 VDSP++ 安装,所需的配置现在在编译器模块本身而不是“Generic-ADSP”平台模块中完成。
平台¶
添加了一个专用的
ADSP平台来替换现有的Generic-ADSP实现。此功能基于 CMAKE_SYSTEM_PROCESSOR 变量自动检测最新的 CCES/VDSP++ 安装和编译器选择(cc21k与ccblkfn)。
命令¶
cmake_host_system_information()命令在 Windows 上获得了QUERY WINDOWS_REGISTRY模式。请参阅其 查询 Windows 注册表 部分。cmake_language()命令获得了一个新的SET_DEPENDENCY_PROVIDER子命令。设置依赖项提供程序时,可以通过自定义命令重定向对find_package()和FetchContent_MakeAvailable()的调用,该命令可以选择直接完成请求、修改请求的处理方式或将其留给由内置实现来实现。请参阅:ref:dependency_providers。file(DOWNLOAD)命令获得了选项RANGE_START和RANGE_END来指定要下载的字节范围。这对于下载大二进制文件的部分很有用。find_file()、find_path()、find_library()、find_program()和find_package()命令获得了NO_CMAKE_INSTALL_PREFIX选项来控制搜索:variable :CMAKE_INSTALL_PREFIX。find_file()、find_path()、find_library()、find_program()和find_package()命令获得了指定必须查询哪些 Windows 注册表视图的能力。find_package()命令获得了一个GLOBAL选项,允许在find_package()调用期间将导入的目标提升到全局范围。if()命令通过使用PATH_EQUAL运算符获得了比较路径的能力。请参阅政策:policy:CMP0139。
变量¶
添加了
CMAKE_COLOR_DIAGNOSTICS变量来控制编译器生成的颜色诊断。此变量还使用 Makefile Generators 控制颜色构建系统消息,替换 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 Generators 是否禁用编译器并行性并一次使用一个源文件调用编译器。
引入了
CMAKE_WATCOM_RUNTIME_LIBRARY变量和WATCOM_RUNTIME_LIBRARY目标属性来选择针对 Watcom ABI 的编译器使用的运行时库。请参阅政策:policy: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:...>生成器表达式。请参阅政策:policy:CMP0131。添加了
VS_DOTNET_STARTUP_OBJECT目标属性以告知 Visual Studio 生成器 在执行程序或项目时应使用哪个启动类。当托管 .NET 项目中有多个static void Main(string[])函数签名时,这是必需的。
模块¶
ExternalProject模块ExternalProject_Add()命令获得了一个新的DOWNLOAD_EXTRACT_TIMESTAMP选项,用于控制当URL下载方法为用过的。添加策略:policy:CMP0135 以默认启用该选项。FetchContent模块和find_package()命令现在支持集成功能:FetchContent_MakeAvailable()现在可以尝试通过先调用find_package()来满足依赖关系。一个新的FETCHCONTENT_TRY_FIND_PACKAGE_MODE变量控制是否默认为所有依赖项完成此操作,是按依赖项选择加入,还是完全禁用。find_package()可以重新路由以调用FetchContent_MakeAvailable()。一个新的只读CMAKE_FIND_PACKAGE_REDIRECTS_DIR变量指向配置包文件所在的目录,以促进这些重新路由的调用。
FindJNI模块现在提供导入的目标。FindMatlab 模块 matlab_add_mex 函数获得了一个 NO_IMPLICIT_LINK_TO_MATLAB_LIBRARIES 选项来禁用 MATLAB 库的自动链接。
FindVulkan 模块现在支持组件选择要查找的 VulkanSDK 工具和库,以及 Vulkan SDK 标头和库。
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>目标属性可用于解决不兼容的功能。LINK_LIBRARY生成器表达式可以在针对Apple平台时以各种方式链接框架。添加了以下功能:框架NEEDED_FRAMEWORKREEXPORT_FRAMEWORK弱框架
LINK_LIBRARY生成器表达式可以在针对Apple平台时以各种方式链接库。添加了以下功能:NEEDED_LIBRARYREEXPORT_LIBRARYWEAK_LIBRARY
LINK_LIBRARY生成器表达式获得了WHOLE_ARCHIVE特性,以强制加载静态库中的所有成员。以下目标平台支持此功能:所有
Apple变体Linux所有
BSD变体SunOS窗户CYGWINMSYS
添加了
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生成器表达式以计算给定包目标的包目录的名称。
C测试¶
ctest(1)获得了一个--test-output-truncation选项(和相应的CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION变量)来指定截断模式一旦达到最大测试输出大小。可能的值是“tail”(默认值)、“middle”或“head”。
包装¶
CPack WIX Generator获得了一个新变量CPACK_WIX_ARCHITECTURE,用于指定安装程序架构,以支持运行 Windows for ARM 的计算机。当使用 libarchive 3.6 或更高版本编译时,CPack 现在支持 zstd 压缩的 CPACK_THREADS 选项。它由 cmake.org 上提供的官方 CMake 二进制文件支持。
弃用和删除的功能¶
CPack 模块不再在 CPack DragNDrop Generator 中默认启用 SLA。请参阅政策:policy:CMP0133 和
CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE变量。已弃用的
CPack PackageMaker Generator已被删除。FindGLUT模块不再提供未记录的GLUT_LIBRARY和GLUT_INCLUDE_PATH结果变量。FindVulkan模块不再默默地忽略由find_package(Vulkan REQUIRED ...)调用请求的未知组件。通过添加对组件的支持,对未知组件的请求现在会产生错误。
其他变化¶
在构建目录中首次运行 CMake 期间启用相应语言时,CMake 不再设置环境变量,如:envvar:CC、
CXX等。请参阅政策:policy:CMP0132。CheckIPOsupported模块check_ipo_supported()命令现在使用调用者的CMAKE_<LANG>_FLAGS和CMAKE_<LANG>_FLAGS_<CONFIG>值。请参阅政策:policy:CMP0138。MSYS Makefiles和MinGW Makefiles生成器,当未明确指定编译器时,现在选择在PATH环境变量列出的目录中找到的第一个编译器(任何名称)。try_compile()命令 whole-project 签名现在传播平台变量。请参阅政策:policy:CMP0137。while()命令现在可以在条件评估期间诊断错误。请参阅政策:policy:CMP0130。cmake.org 上提供的预编译 macOS 二进制文件不再将 SLA 附加到 .dmg` 包。这已被删除,因为 macOS 12 弃用了用于附加 .dmg 资源的工具。
预编译的 Windows
arm64二进制文件现在在 cmake.org 上提供。
更新¶
自 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¶
此版本未对记录的功能或界面进行任何更改。进行了一些实施更新以支持生态系统更改和/或修复回归。