CMake 3.24 发行说明¶
自 CMake 3.23 以来所做的更改包括以下内容。
新功能¶
预设¶
cmake-presets(7)
文件现在支持模式版本5
。cmake-presets(7)
文件现在支持${pathListSep}
宏,该宏基于平台扩展至:
或;
。cmake-presets(7)
文件获得了在测试预设中指定testOutputTruncation
字段的支持,该字段指定达到最大的测试输出大小时要使用的截断模式。
生成器¶
如果更新任何 CMake 文件,
Green Hills MULTI
生成器现在会生成重新运行 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
实现。此功能会自动检测最新的 CCES/VDSP++ 安装和编译器选择(cc21k
与ccblkfn
),方法是基于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()
调用的过程。
Variables¶
添加
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 Generators 是否禁用编译器并行性,并一次调用编译器使用一个源文件。引入
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>
目标特性可用于解决不兼容的特性。当面向
Apple
平台时,LINK_LIBRARY
生成器表达式可以以各种方法链接框架。添加了以下特性FRAMEWORK
NEEDED_FRAMEWORK
REEXPORT_FRAMEWORK
WEAK_FRAMEWORK
当面向
Apple
平台时,LINK_LIBRARY
生成器表达式可以以各种方法链接库。添加了以下特性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
生成器表达式以评估给定束目标的束目录名称。
CTest¶
ctest(1)
获得了一个--test-output-truncation
选项(以及相应的CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION
变量)用于指定达到最大测试输出大小后的截断模式。可能的值为tail
(默认值)、middle
或head
。
CPack¶
CPack WIX Generator
获得了一个新变量CPACK_WIX_ARCHITECTURE
,用于指定安装程序架构,以支持运行 Windows 的 ARM 计算机。在使用 libarchive 3.6 或更高版本编译时,CPack 现在支持
CPACK_THREADS
选项用于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
等环境变量,而是在第一次运行 CMake 时启用相应的语言。请参阅策略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
资源的工具。预编译的 Windows
arm64
二进制文件现在在 cmake.org 上提供。
更新¶
自 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¶
此版本未对已记录的功能或界面进行任何更改。进行一些实现更新以支持生态系统更改或者修复回归。