xmake從入門到精通6:開發和構建Qt程序
- 2019 年 12 月 4 日
- 筆記
xmake是一個基於Lua的輕量級現代化c/c++的項目構建工具,主要特點是:語法簡單易上手,提供更加可讀的項目維護,實現跨平台行為一致的構建體驗。
xmake完全支持對Qt5項目的維護和構建,通過本文將會帶你了解如何通過xmake來維護各種類型的Qt項目。
- 項目源碼
- 官方文檔
前言
Qt是一個1991年由Qt Company開發的跨平台C++圖形用戶界面應用程序開發框架。它有自己的IDE程序:qt creator,也有自己的構建程序:qmake,似乎新版本開始打算全面切到cmake來維護了。
儘管如此,xmake還是對Qt的開發做了支持,搭配上xmake-vscode/xmake-idea等插件,使用戶可以在自己熟悉的編輯器和IDE上集成和開發Qt程序,並且在不同平台上提供一致的開發體驗。
準備構建環境
首先,我們得準備好Qt開發環境,如果還沒安裝Qt SDK,那麼到qt的官網登錄下載安裝包:https://www.qt.io/,或者自己拉取qt源碼,編譯靜態版本sdk和工具鏈。
通常情況,如果是採用官方提供的QT SDK安裝包,並且安裝目錄採用的默認路徑,那麼即使不配置QT SDK路徑,xmake也會嘗試去檢測它,一般都是能檢測到的,如果檢測不到,我們可以嘗試手動配置下它:
$ xmake f --qt=/home/xxx/qtsdk
或者設置到全局路徑,避免每次編譯切換都要配置一遍:
$ xmake g --qt=/home/xxx/qtsdk
創建模板工程
xmake內置了各種Qt項目的空工程模板,我們可以通過xmake create
命令來快速創建它們。
註:由於xmake的master最新版本,也就是還未發佈的v2.2.9版本對Qt的模板和構建規則進行了升級,因此本文主要講解的都是基於最新版本來講解, 而之前的老模版和規則也是向下兼容的,如果想要繼續了解,可以查看相關文檔:Qt項目開發文檔
創建QuickApp應用程序
我們先來創建一個帶qml的quickapp空工程,只需要敲如下命令:
$ 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工程