最近給xmake新增了對 Qt SDK 環境的支持,如今咱們徹底能夠脫離 Qt Creator 進行 Qt 應用程序的開發,甚至配合 vscode/idea/sublime/vim 等編輯器+xmake 插件(xmake-vscode, xmake-idea, xmake-sublime ...), 用戶徹底能夠切換到本身最經常使用的編輯器環境中去開發和構建 Qt 程序,例如這樣:c++
xmake 內置了一些工程模板能夠用來快速建立一個基於 Qt 的空工程,例如:git
$ xmake create -l c++ -t console_qt test
$ xmake create -l c++ -t static_qt test
$ xmake create -l c++ -t shared_qt test
$ xmake create -l c++ -t quickapp_qt test
複製代碼
目前主要提供上述四種工程模板,對應:控制檯程序、靜態庫、動態庫、ui 應用程序。github
以 quickapp 工程爲例,最後生成的空工程xmake.lua
內容大概長這樣:vim
target("qt_demo")
-- add rules
add_rules("qt.application")
-- add headers
add_headers("src/*.h")
-- add files
add_files("src/*.cpp")
add_files("src/qml.qrc")
-- add frameworks
add_frameworks("QtQuick")
複製代碼
默認狀況下 xmake 會自動探測 Qt 環境,固然若是找不到 Qt SDK 環境,用戶也能夠手動指定 Qt SDK 環境目錄:bash
$ xmake f --qt=~/Qt/Qt5.9.1
複製代碼
xmake 經過內置的構建規則qt.static
,將其應用到對應的 target,便可讓相關 target 支持 Qt 靜態庫的構建,很是的方便簡潔,關於構建規則的說明,可參考相關文檔:內建規則app
若是你們想要支持其餘構建環境,也只須要方便的自定義一個本身的擴展規則,應用到對應的 target 便可實現,言歸正傳,咱們看下 Qt 靜態庫的xmake.lua
描述:框架
target("test")
add_rules("qt.static")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
複製代碼
很是簡單,通常只須要這幾行就 ok 了,若是須要用到 Qt 的一些框架庫,能夠經過add_frameworks
來添加, 接着就是正常的編譯過程:編輯器
$ xmake
複製代碼
動態庫程序跟上節介紹的靜態庫描述規則相似,惟一的區別就是吧構建規則改爲add_rules("qt.shared")
就好了。ide
target("test")
add_rules("qt.shared")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
複製代碼
那add_rules("qt.shared")
和以前的set_kind("shared")
有什麼區別呢,區別就是:ui
set_kind("shared")
: 是 xmake 最爲基礎的動態庫構建模式,很是原始,不附加任何框架層的依賴庫和配置add_rules("qt.shared")
:僅用於 Qt 動態庫的構建,屬於內置的擴展規則,會附加 Qt SDK 的構建環境控制檯也是相似,直接替換構建規則就能夠了:qt.console
target("test")
add_rules("qt.console")
add_files("src/*.cpp")
複製代碼
從 Qt 目前最新的 SDK,主要提供了兩種 ui app 的構建框架,Quick App 和 Widgets App,xmake 也都進行了支持,而且統一規範成:qt.application
Qt 應用程序規則來簡化設置。
target("qt_quickapp")
add_rules("qt.application")
add_files("src/*.cpp")
add_files("src/qml.qrc")
add_frameworks("QtQuick")
複製代碼
看上述描述,僅僅只須要把對應的qml.qrc
做爲源文件添加進去,而後附加須要的 QtQuick 依賴庫就好了。
注:雖然 xmake 的add_links
也是用來添加依賴庫進行連接的,可是這裏建議對於 Qt SDK 提供的庫仍是用add_frameworks
來添加,由於全部 Qt 的構建規則都對add_frameworks
進行了擴展, 對 Qt 自帶的框架庫進行了更好的支持,也能根據構建模式自動切換 debug/release 版本的 Qt 庫。
Widgets App 的描述規則仍是用的qt.application
,只須要把.ui 文件添加進去就好了,惟一須要注意的是,帶Q_OBJECT
meta 的頭文件,例如:mainwindow.h
這種, 由於有個 moc 預處理過程,因此也須要把它添加到源文件中,這樣 Qt 的構建規則就會檢測到,將其自動進行 moc 預處理。
target("qt_widgetapp")
add_rules("qt.application")
add_files("src/*.cpp")
add_files("src/mainwindow.ui")
add_files("src/mainwindow.h") -- 添加帶有 Q_OBJECT 的 meta 頭文件
add_frameworks("QtWidgets")
複製代碼
關於 Qt SDK 環境支持的更多詳情能夠參考:#160
項目源碼:github.com/tboox/xmake,歡迎大夥 star