Qt6重磅更新:构建系统为CMake,qmake将逐渐被取代!

您可以在使用qmake或CMake构建Qt之间进行选择。通过-cmake配置以使用基于CMake的生成。对于最终版本,预计qmake构建系统将随着pass-cmake的需要而消失。

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版>>

点击获取更多文章教程

Qtitan组件集

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 : 是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面操作系统。
  • QtitanDataGrid| 下载试用 : 适用于Qt的商业化DataGrid 组件,使得表格数据可以直接面向终端用户完全集成了QtDesigner,极易适应其他相似开发环境,保证100%兼容Qt GUI。

CMake:

  • 广泛适用和可用。
    甚至在Visual Studio广泛使用。
  • 收到许多社区的追捧
    有许多用于第三方库的软件包。
  • 稳定成熟。
    明年,它将获得美国消费酒精饮料行业的许可。

用于构建Qt的CMake 3.18.4最近发布了!

使用配置或普通CMake

目前,qmake构建系统仍然存在。您可以在使用qmake或CMake构建Qt之间进行选择。通过-cmake配置以使用基于CMake的生成。

对于最终版本,预计qmake构建系统将随着pass-cmake的需要而消失。

例如,以下调用将Qt配置为安装到 Qt / 6.0.0,并关闭对QLCDNumber窗口小部件的支持,并跳过qtsvg存储库:

configure -cmake -prefix /opt/Qt/6.0.0 -no-feature-lcdnumber -skip qtsvg

配置脚本将这些参数转换为以下CMake调用:

cmake -GNinja -DCMAKE_INSTALL_PREFIX=/opt/Qt/6.0.0 -DFEATURE_lcdnumber=OFF -DBUILD_qtsvg=OFF /path/to/qt/sources

这是一个很详尽的说明,并说明了我们的configure脚本的有用性。

使用configure,我们可以在–参数之后将额外的参数传递给CMake 。上面的configure调用与此等效:

configure -cmake -prefix ~/Qt/6.0.0 -no-feature-lcdnumber -- -DBUILD_qttools=OFF

配置后,使用cmake –build .或ninja构建项目。

我们建议使用CMake的Ninja生成器。这也是配置的默认值。

可以通过传递-CMake generator来指定CMake生成器来使用另一个生成器,传递-CMake use default generator来使用CMake的默认生成器,即不传递-G参数。

使用cmake –install .安装Qt。

交叉编译Qt

要使用CMake交叉编译项目,必须指定一个工具链文件。这个CMake语言文件为平台名称,使用的编译器/链接器以及其他许多特定于工具链的东西设置正确的值。

工具链文件的概念类似于qmake的mkspecs。

让我们看看如何在Linux上构建Qt的Android版本。

configure -cmake -prefix /opt/Qt/6.0.0-android -qt-host-path /opt/Qt/6.0.0 -xplatform android-clang -android-ndk ~/Android/android-sdk-tools/ndk-bundle -android-sdk ~/Android/android-sdk-tools -android-abis armeabi-v7a

最显著的区别是-qt主机路径选项。要交叉构建Qt,您需要指向主机平台已经存在的本机构版本这被称为主机Qt。
所有本地主机工具,如moc、rcc和uic都是从那里运行的。

在Qt5中,我们为每个交叉构建重新构建了宿主工具。从现有的主机Qt安装中重新使用主机工具可以避免我们反复为每个交叉构建构建构建主机工具,并大大简化了Qt的构建系统。

交叉编译Qt不会为目标平台生成宿主工具,除非将CMake变量Qt_build_tools_设置为ON。在嵌入式Linux环境中这样做很有用。
-xplatformandroid-clang参数只影响为这个交叉构建提供qmake支持而生成的相关文件。
android ndk参数指向ndk并选择位于其中的CMake工具链文件。
-android-sdk参数指向sdk。
android abis参数选择我们要构建的ABI。请注意,多ABI构建尚未实现。

为了将所有内容放在一起,上面的configure调用被转换为以下CMake调用:

cmake -DQT_HOST_PATH=/opt/Qt/6.0.0 -DQT_QMAKE_TARGET_MKSPEC=android-clang -DANDROID_SDK_ROOT=/home/jobor/Android/android-sdk-tools -DCMAKE_TOOLCHAIN_FILE=/home/jobor/Android/android-sdk-tools/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_INSTALL_PREFIX=/opt/Qt/6.0.0-android -G Ninja /path/to/qt/source

同样,用cmake –build .或进行构建ninja。

使用cmake –install .安装的Qt。

建立基于Qt的项目

一旦安装了Qt,就可以使用CMake或qmake来构建项目。

qmake一切照旧:

mkdir ~/my-project-buildcd ~/my-project-build/opt/Qt/6.0.0/bin/qmakemake

注意:这也适用于跨版本。那里,qmake是一个包装脚本,它使用生成的qt.conf调用主机Qt的qmake可执行文件,该文件设置正确的路径和mkspec。

Qt带有一个名为qt-cmake的包装脚本,可为CMake提供类似的体验:

mkdir ~/my-project-buildcd ~/my-project-build/opt/Qt/6.0.0/bin/qt-cmakecmake --build .

qt-cmake使用CMAKE_TOOLCHAIN_FILE设置为Qt内部工具链文件的变量调用CMake,该文件设置正确的编译器并在交叉编译的情况下链式加载“实际”工具链文件。

注意:如果您发现需要链式加载其他工具链文件,请传递-DQT_CHAINLOAD_TOOLCHAIN_FILE=给qt-cmake。

QT-cmake的并没有设置CMake的生成。如果您始终要使用Ninja(我们建议使用),请将环境变量设置CMAKE_GENERATOR为Ninja。

构建Qt模块

qt-configure-module与已安装的Qt分开构建Qt模块时,它是首选工具。该qt-configure-module脚本采用与顶级Qt configure调用相同的参数-限于适用于我们当前正在配置的模块的参数。

在以下示例中,我们首先构建并安装qtbase,然后在关闭qml-network功能的情况下构建qtdeclarative。

mkdir ~/dev/qt/qtbase-buildcd ~/dev/qt/qtbase-build../qtbase/configure -prefix /opt/Qt/6.0.0cmake --build .cmake --install .mkdir ~/dev/qt/qtdeclarative-buildcd ~/dev/qt/qtdeclarative-build/opt/Qt/6.0.0/bin/qt-configure-module ../qtdeclarative -no-qml-networkcmake --build .cmake --install .

构建独立的测试和示例

有两个好消息:

  1. ot构建所有的测试现在是默认的!不需要再通过任何测试了。类似的例子也一样。
    如果您真的想构建所有的test和examples,请通过-maketests-makeexamples参数。我们相信,新的缺省值将导致命令行字符的类型大大减少,从而为更有趣的调用节省这一稀缺资源。
  2. 配置和构建单个自动测试或示例很容易。

这是您构建和运行QProcess自动测试的方式:

mkdir ~/dev/qt/tst_qprocesscd ~/dev/qt/tst_qprocess/opt/Qt/6.0.0/bin/qt-cmake-standalone-test ../qtbase/tests/auto/corelib/io/qprocesscmake --build .ctest -V

这使用了CMake附带的ctest工具,但是您当然也可以直接运行可执行文件。

构建示例的方式类似:

mkdir ~/dev/qt/wigglycd ~/dev/qt/wiggly/opt/Qt/6.0.0/bin/qt-cmake ../qtbase/examples/widgets/widgets/wigglycmake --build ../wiggly

我们希望您对CMake的转换尽可能顺利,并且Qt和CMake社区将彼此受益。

感谢您的阅读,希望这篇文章能带给你一定的帮助!如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt6免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎咨询在线客服获取更多优惠>>

Qt6重磅更新:构建系统为CMake,qmake将逐渐被取代!
标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年9月11日
下一篇 2020年9月11日

相关推荐

发表回复

登录后才能评论