CMake 3.24 发布说明¶
自 CMake 3.23 以来的更改包括以下内容。
新功能¶
预设¶
cmake-presets(7)
文件现支持 schema 版本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
vs.ccblkfn
)的功能。
命令¶
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
特性,用于强制加载静态库中的所有成员。该特性支持以下目标平台:所有
Apple
变体Linux
所有
BSD
变体SunOS
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 target)的包目录名称。
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 现在支持使用 libarchive 3.6 或更高版本编译时的
zstd
压缩的CPACK_THREADS
选项。官方 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 中新增的
LLVMFlang
Fortran 编译器支持已得到扩展:现已支持 Fortran 与 C 或 CXX 之间的混合语言链接。
现已支持 Windows 上的 GNU ABI(MinGW),但尚未支持 MSVC ABI。
进行了一些实现更新,以支持生态系统更改和/或修复回归。
3.24.4¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。