xmake从入门到精通6:开发和构建Qt程序

xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特色是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。android

xmake彻底支持对Qt5项目的维护和构建,经过本文将会带你了解如何经过xmake来维护各类类型的Qt项目。c++

前言

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它有本身的IDE程序:qt creator,也有本身的构建程序:qmake,彷佛新版本开始打算全面切到cmake来维护了。git

尽管如此,xmake仍是对Qt的开发作了支持,搭配上xmake-vscode/xmake-idea等插件,使用户能够在本身熟悉的编辑器和IDE上集成和开发Qt程序,而且在不一样平台上提供一致的开发体验。github

准备构建环境

首先,咱们得准备好Qt开发环境,若是还没安装Qt SDK,那么到qt的官网登陆下载安装包:www.qt.io/,或者本身拉取qt源码…swift

一般状况,若是是采用官方提供的QT SDK安装包,而且安装目录采用的默认路径,那么即便不配置QT SDK路径,xmake也会尝试去检测它,通常都是能检测到的,若是检测不到,咱们能够尝试手动配置下它:bash

$ xmake f --qt=/home/xxx/qtsdk
复制代码

或者设置到全局路径,避免每次编译切换都要配置一遍:app

$ xmake g --qt=/home/xxx/qtsdk
复制代码

建立模板工程

xmake内置了各类Qt项目的空工程模板,咱们能够经过xmake create命令来快速建立它们。框架

注:因为xmake的master最新版本,也就是还未发布的v2.2.9版本对Qt的模板和构建规则进行了升级,所以本文主要讲解的都是基于最新版原本讲解, 而以前的老模版和规则也是向下兼容的,若是想要继续了解,能够查看相关文档:Qt项目开发文档编辑器

建立QuickApp应用程序

咱们先来建立一个带qml的quickapp空工程,只须要敲以下命令:ide

$ xmake create -t qt.quickapp test
create test ...
  [+]: xmake.lua
  [+]: src/main.qml
  [+]: src/main.cpp
  [+]: src/qml.qrc
  [+]: .gitignore
create ok!
复制代码

xmake会生成带有xmake.lua的Qt项目,xmake.lua内容也很简单:

target("test")
    add_rules("qt.quickapp")
    add_headerfiles("src/*.h")
    add_files("src/*.cpp") 
    add_files("src/qml.qrc")
复制代码

除了源文件的添加,其余基本上都跟以前的可执行程序项目没什么不一样,惟一的区别就是经过add_rules("qt.quickapp")这个内置的Qt构建规则来代替set_kind("binary")

其实qt.quickapp规则内部最终仍是设置了binary类型,只不过在此基础上额外增长了一些只有Qt才须要的构建规则,好比:特定links,flags还有includedirs等。

接下来,咱们尝试编译下这个项目:

$ xmake
checking for the architecture ... x86_64
checking for the Xcode directory ... /Applications/Xcode.app
checking for the SDK version of Xcode ... 10.15
checking for the Qt SDK directory ... /Users/ruki/Qt5.13.2/5.13.2/clang_64
checking for the Qt SDK version ... 5.13.2
[  0%]: ccache compiling.release src/main.cpp
[ 49%]: compiling.qt.qrc src/qml.qrc
[100%]: linking.release test
复制代码

其中*.qrc文件的构建规则也是在qt.quickapp的构建规则里面维护的,因此只有设置了这个rule,才能正常编译qrc文件。

最后,咱们尝试运行下看看:

$ xmake run
复制代码

运行效果以下:

建立WidgetApp应用程序

建立一个widgetapp工程跟上文的quickapp方式基本一致,只须要改下模板名便可:

$ xmake create -t qt.widgetapp test
复制代码

里面xmake.lua的内容看起来,也仅仅就是把qt.quickapp规则改为了qt.widgetapp规则,另外,ui描述文件从.qrc变成了.ui,其余并没有区别。

target("qt_widgetapp")
    add_rules("qt.widgetapp")
    add_files("src/*.cpp") 
    add_files("src/mainwindow.ui")
    add_files("src/mainwindow.h")  -- 添加带有 Q_OBJECT 的meta头文件
复制代码

运行效果以下:

建立静态连接版本应用程序

默认经过qt官网下载的sdk,都是基于动态库的,若是用户用的是本身拉取qt源码而后编译的static版本qt sdk,那么建立的qt工程类型也必须对应static版本,由于二者来处理连接上会有不一样的逻辑。

对于模板名,后面追加下_static来建立:

$ xmake create -t qt.widgetapp_static test
复制代码

建立的就是基于静态QtSdk的WidgetApp工程,其里面的构建规则,也会改为add_rules("qt.widgetapp_static"),其余并没有不一样,QuickApp项目也是如此。

建立其余Qt项目

除了QuickApp和WidgetApp项目,xmake还支持其余Qt项目的建立和编译,好比:终端程序,基于Qt的静态库和动态库等。

具体的工程模板,咱们能够进入help菜单查看里面的模板列表:

$ xmake create --help
Usage: $xmake create [options] [target]

Create a new project.

Options: 
    -t TEMPLATE, --template=TEMPLATE       Select the project template id or 
                                           name of the given language. 
                                           (default: console)
                                               - console: c++, go, dlang, cuda, 
                                           rust, swift, objc, c, objc++
                                               - qt.console: c++
                                               - qt.quickapp: c++
                                               - qt.quickapp_static: c++
                                               - qt.shared: c++
                                               - qt.static: c++
                                               - qt.widgetapp: c++
                                               - qt.widgetapp_static: c++
复制代码

更多其余Qt项目的使用说明,能够查看xmake的官方文档:Qt项目构建文档

运行和断点调试

咱们能够经过xmake run -d命令来加载gdb/lldb调试程序,或者搭配xmake-vscode插件的断点调试支持,来开发和调试Qt程序。 这块能够阅读前文:xmake从入门到精通3:运行和调试目标程序

另外,若是是win平台,咱们也能够经过生成vs proj,而后经过vs自带的调试功能,进行断点调试,更加方便:

$ xmake project -k vsxmake
复制代码

生成基于xmake的vs工程后,打开vs工程,点击调试运行便可:

开发Android程序

xmake目前是彻底支持编译Android版本的Qt项目,整个Qt项目包括xmake.lua彻底跟前面的例子一致,并不须要作特别的设置。

咱们须要作的仅仅是,切换到android的编译平台去编译它,不过因为要生成apk包,在执行xmake编译后,qt构建规则会自动对android程序作一个部署deploy步骤,也就是调用qt内部的androiddeployqt程序去生成apk包。

所以除了须要android ndk,咱们还须要额外依赖android sdk,经过设置--android_sdk参数对其指定下:

$ xmake f -p android --ndk=~/Downloads/android-ndk-r19c/ --android_sdk=~/Library/Android/sdk/ -c 
$ xmake
[  0%]: compiling.qt.qrc src/qml.qrc
[ 50%]: ccache compiling.release src/main.cpp
[100%]: linking.release libappdemo.so
[100%]: generating.qt.app appdemo.apk
复制代码

上面的配置和构建过程就能够很方便的将以前的QuickApp和WidgetApp项目编译成Android App,另外qt规则内部还对android版本定制了install程序,能够很方便的安装qt apk到设备。

$ xmake install
installing appdemo ...
installing build/android/armv7-a/release/appdemo.apk ..
success
install ok!
复制代码

安装和运行后的效果以下:

关于如何配置Android编译环境,可阅读前文:xmake从入门到精通5:Android平台编译详解

编辑器和IDE集成

xmake也提供了对各大经常使用编辑器的插件集成支持,配合这些插件,就能够在本身最熟悉的编辑器上开发和构建Qt程序。

在vscode上开发和调试Qt程序

插件地址:xmake-vscode

在Sublime Text上开发Qt程序

插件地址:xmake-sublime

在Idea/CLion/Android Studio上开发Qt程序

插件地址:xmake-idea

在VisualStudio里面开发和调试Qt程序

也就是刚上面提到的经过生成vs proj方式来集成xmake:

$ xmake project -k vsxmake
复制代码

生成基于xmake的vs工程后,打开vs工程,点击调试运行便可:

这块,具体详情,能够查看插件文档:使用xmake生成vs工程

原文:tboox.org/cn/2019/11/…

相关文章
相关标签/搜索