CMake 3.19的新功能

2020-12-19 06:48:42

11月18日,Kitware发布了CMake版本3.19。发行说明包含更改列表。

从命令行配置Qt CMake项目需要一些强制性参数。例如:

通常,还有一些带有特定选项的-D参数,例如-DQT_BUILD_EXAMPLES = ON或-DFEATURE_system_zlib = OFF,命令行变得很长。

最终脚本被使用了,脚本因开发人员的不同而不同,它们可能是跨平台的,也可能是跨平台的。

CMake 3.19附带了对CMakePresets.json和CMakeUserPresets.json文件的支持,这在这方面有所帮助。

{" version":1," cmakeMinimumRequired":{" major":3," minor":19," patch&# 34 ;: 0}," configurePresets&#34 ;: [{" name&#34 ;:" mingw&#34 ;," displayName&#34 ;:" Ninja MinGW 8.1",&generator":" Ninja"," binaryDir":" $ {sourceDir} / build",&# 34; cacheVariables&#34 ;: {" CMAKE_BUILD_TYPE&#34 ;:" Release&#34 ;," CMAKE_PREFIX_PATH&#34 ;:" c:/Qt/6.0.0/mingw81_64&# 34; },"环境&#34 ;: {" PATH&#34 ;:" c:/ Qt / Tools / Ninja; c:/ Qt / Tools / mingw810_64 / bin; $ penv {PATH} " }}]}

Xcode生成器现在在为Xcode 12.0或更高版本生成时使用Xcode“新建系统”。有关Xcode构建系统的选择,请参见CMAKE_XCODE_BUILD_SYSTEM变量。

现在支持Apple Silicon(从CMake 3.19.2开始)。有关选择与CMake检测到的CMAKE_HOST_SYSTEM_PROCESSOR不同的体系结构,请参阅CMAKE_APPLE_SILICON_PROCESSOR。

对于使用Clang 11及更高版本的用户,添加了PCH_INSTANTIATE_TEMPLATES目标属性以在预编译头中启用模板实例化。

例如,在运行Windows 10和Clang-MinGW 11,CMake 3.19.2的Lenovo A485 Ryzen 7笔记本电脑上构建没有示例/测试的Qt6Base。下面的值是四次的中值。

string()命令获得了一组新的JSON子命令,这些子命令提供了JSON解析功能。

cmake_language()命令获得了DEFER模式,以计划命令调用在处理目录结束时发生。

这样,我们可以在CMakeList.txt文件配置结束时调用一个函数,例如,打印find_package调用的摘要:

函数(at_exit)包括(featureSummary)feature_summary(INCLUDE_QUIET_PACKAGES WHAT PACKAGES_FOUND PACKAGES_NOT_FOUND ENABLED_FEATURES DISABLED_FEATURES)endfunction()cmake_language(延迟调用at_exit)

已在问题#19575跟踪了此功能,并允许实现Qt6的某些功能。