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/…

相關文章
相關標籤/搜索