xmake 新增對 Qt 編譯環境支持,用自己最喜愛的編輯器去開發 Qt 程序
來自專欄 TBOOX開源工程5 人贊了文章
最近給xmake新增了對 Qt SDK 環境的支持,現在我們完全可以脫離 Qt Creator 進行 Qt 應用程序的開發,甚至配合 vscode/idea/sublime/vim 等編輯器+xmake 插件(xmake-vscode, xmake-idea, xmake-sublime ...),
用戶完全可以切換到自己最常用的編輯器環境中去開發和構建 Qt 程序,例如這樣:$ 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 應用程序。
以 quickapp 工程為例,最後生成的空工程xmake.lua
內容大概長這樣:
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")
Qt SDK 環境配置
默認情況下 xmake 會自動探測 Qt 環境,當然如果找不到 Qt SDK 環境,用戶也可以手動指定 Qt SDK 環境目錄:$ xmake f --qt=~/Qt/Qt5.9.1
靜態庫程序
xmake 通過內置的構建規則qt.static
,將其應用到對應的 target,即可讓相關 target 支持 Qt 靜態庫的構建,非常的方便簡潔,關於構建規則的說明,可參考相關文檔:內建規則
如果大家想要支持其他構建環境,也只需要方便的自定義一個自己的擴展規則,應用到對應的 target 即可實現,言歸正傳,我們看下 Qt 靜態庫的xmake.lua
描述:
target("test") add_rules("qt.static") add_files("src/*.cpp") add_frameworks("QtNetwork", "QtGui")
add_frameworks
來添加, 接著就是正常的編譯過程:$ xmake
動態庫程序
動態庫程序跟上節介紹的靜態庫描述規則類似,唯一的區別就是吧構建規則改成add_rules("qt.shared")
就行了。
target("test") add_rules("qt.shared") add_files("src/*.cpp") add_frameworks("QtNetwork", "QtGui")
那add_rules("qt.shared")
和之前的set_kind("shared")
有什麼區別呢,區別就是:
set_kind("shared")
: 是 xmake 最為基礎的動態庫構建模式,非常原始,不附加任何框架層的依賴庫和配置add_rules("qt.shared")
:僅用於 Qt 動態庫的構建,屬於內置的擴展規則,會附加 Qt SDK 的構建環境
target("test") add_rules("qt.console") add_files("src/*.cpp")
Quick 應用程序
從 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 依賴庫就行了。
add_links
也是用來添加依賴庫進行鏈接的,但是這裡建議對於 Qt SDK 提供的庫還是用add_frameworks
來添加,因為所有 Qt 的構建規則都對add_frameworks
進行了擴展,對 Qt 自帶的框架庫進行了更好的支持,也能根據構建模式自動切換 debug/release 版本的 Qt 庫。Widgets 應用程序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")
推薦閱讀:
※用 iPad Pro 作為我的主力工作電腦
※Python基礎:字元串格式化--完整版
※物聯網技術中的「兩域、六層」
※用Python書寫520,用代碼丈量你的TA
※ACL 2017:大牛教你Deadline前續命