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
学会了识别双破折号 (--
) 参数,该参数充当指示选项结束的分隔符。任何后续参数都将被视为操作数/位置参数,即使它们以破折号-
字符开头。cmake(1)
-E tar
命令增加了--touch
选项,用于保留当前的本地时间戳,而不是从存档中提取文件时间戳。
编译器¶
LLVM 的 flang Fortran 编译器现在在某些平台上受支持,编译器 ID 为
LLVMFlang
。
ADSP 编译器支持(SHARC 和 Blackfin)现在涵盖 CCES 和 VDSP++ 安装,所需的配置现在在编译器模块本身中完成,而不是在
Generic-ADSP
平台模块中完成。
平台¶
添加了一个专用的
ADSP
平台来替换现有的Generic-ADSP
实现。此功能具有自动检测最新的 CCES/VDSP++ 安装和编译器选择(cc21k
与ccblkfn
)的功能,基于CMAKE_SYSTEM_PROCESSOR
变量。
命令¶
cmake_host_system_information()
命令在 Windows 上获得了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
变量指向一个目录,可以在其中找到配置包文件,以方便这些重新路由的调用。
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>
目标属性可用于解决不兼容的功能。LINK_LIBRARY
生成器表达式在以Apple
平台为目标时,可以通过多种方式链接框架。添加了以下功能FRAMEWORK
NEEDED_FRAMEWORK
REEXPORT_FRAMEWORK
WEAK_FRAMEWORK
LINK_LIBRARY
生成器表达式在以Apple
平台为目标时,可以通过多种方式链接库。添加了以下功能NEEDED_LIBRARY
REEXPORT_LIBRARY
WEAK_LIBRARY
LINK_LIBRARY
生成器表达式获得了WHOLE_ARCHIVE
功能,以强制加载静态库中的所有成员。以下目标平台支持此功能all
Apple
variantsLinux
all
BSD
variantsSunOS
Windows
CYGWIN
MSYS
添加了
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 目标的 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 现在支持
CPACK_THREADS
选项,用于在使用 libarchive 3.6 或更高版本编译时进行zstd
压缩。cmake.org 上的官方 CMake 二进制文件支持此功能。
已弃用和删除的功能¶
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()
命令 whole-project 签名现在传播平台变量。请参阅策略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 中添加的
LLVMFlang
Fortran 编译器支持已得到扩展它现在支持 Fortran 和 C 或 CXX 之间的混合语言链接。
它现在支持 Windows 上的 GNU ABI (MinGW),但尚不支持 MSVC ABI。
进行了一些实现更新,以支持生态系统更改和/或修复回归。
3.24.4¶
此版本未对记录的功能或接口进行任何更改。进行了一些实现更新,以支持生态系统更改和/或修复回归。