cmake構建Qt外掛
為什麼要使用外掛
在進行大型客戶端專案的開發時,往往需要分成很多的功能模組,這是架構在設計時候就必須考慮的,良好的架構應該易於擴充套件,使用動態庫就可以很好的實現,但是動態庫使用中會使用到具體的定義,高層模組反而依賴於底層模組的實現,這是不符合設計模式中依賴反轉的,動態庫的改變就要主程式重新編譯,外掛就解決了這個問題,外掛基於主程式提供介面的來實現,很好的實現了依賴反轉,高層模組不應該依賴於底層模組,而應該使底層模組依賴於高層模組的抽象介面。使用外掛後,外掛模組的重新編譯或者缺少都不會影響主程式的正常執行,只會造成對應模組功能的缺少。
Qt外掛簡介
外掛是過載了虛擬函式的dll,這跟抽象工廠類類似,這便是外掛的原理。Qt的外掛可以說是一種動態庫在函式中,我們匯入Interface介面檔案,也就是外掛介面檔案,不需要依賴靜態庫生成程式碼,類似C/C++關鍵字extern。而在最後我們透過系統的API載入dll或者so,這個可以自行百度查閱 “動態庫載入的兩種方式”。這樣做的好處:定義開發正規化,面向Interface程式設計,內部封裝,模組和整體流程開發分離,提高開發效率。應用場景QtCreator-IDE、WPS、visual studio、Nodepad++等等,都是採用這種開發方式。
如何使用Qt外掛
- 定義一個介面集(只有純虛擬函式的類)。
- 用宏Q_DECLARE_INTERFACE()將該介面告訴 Qt 元物件系統
- 宣告外掛類,外掛類繼承自 QObject 和外掛實現的介面。
- 用宏Q_INTERFACES()將外掛介面告訴 Qt 元物件系統(在標頭檔案中)。
- 用適當的qmke或者cmake檔案構建外掛。
cmake是什麼
回顧學習c語言時候就知道了c語言的執行步驟是預處理,編譯,彙編,連結,如果是單檔案我們可以在cmd中使用gcc命名直接編譯成可執行程式,但是在專案中,會有許多的檔案,各個檔案之間又有各種依賴關係,以及需要使用各種資原始檔,如圖片,影片音訊等,這種情況下就需要使用專案組織檔案了。而cmake就是其中一種跨平臺的,目前使用範圍最廣。cmake可以說是現在的趨勢,Qt官方也鼓勵使用cmake構建程式。
使用cmake構建Qt外掛
為了熟悉cmake的使用,可以在外掛中使用cmake組織外掛工程,外掛不會影響到主程式。
CMake的基礎語法可以大致歸納為以下幾個主要部分:
-
註釋:
- 在CMake中,註釋使用
#
字元開始,並持續到該行結束。
- 在CMake中,註釋使用
-
命令:
- CMake的命令不區分大小寫(但引數會區分大小寫)。
- 命令由命令名和引數列表組成,引數之間使用空格進行分隔。
- 使用一對雙引號包括的字串被認為是一個引數。
- 命令可以是一個內建命令(如
project
,add_executable
等),也可以是一個使用者定義的宏(macro)或者函式(function)。
-
資料型別:
- CMake的基本資料型別是字串。
- 一組字串在一起稱為列表(list)。
- 使用
${VariableName}
語法來訪問變數的值(變數名區分大小寫)。 - 可以在字串內部使用
${VariableName}
來訪問變數的值。 - 使用
$ENV{VariableName}
來訪問環境變數的值。
-
條件控制和迴圈結構:
- 使用
if
命令進行條件控制。 - 條件控制命令的語法為:
if(expression) # ... elseif(expression2) # ... else() # ... endif()
- 條件表示式可以包括變數和邏輯運算子(如
AND
,OR
,NOT
等)。
- 使用
-
變數與引數:
- CMake提供了豐富的變數和引數,用於控制專案的構建過程。
- 常用的變數包括:
CMAKE_INSTALL_PREFIX
:安裝路徑的字首。CMAKE_BUILD_TYPE
:構建型別,如Debug
、Release
等。CMAKE_CXX_STANDARD
:C++標準。
- 變數可以透過
set
命令進行設定。
-
函式與命令:
- CMake提供了豐富的函式和命令,用於實現各種功能。
- 常用的函式包括:
add_executable
:新增可執行檔案。add_library
:新增庫檔案。target_link_libraries
:連結庫檔案。
- 常用的命令包括:
set
:設定變數。
-
CMakeLists.txt檔案:
- CMake的主要配置檔案是
CMakeLists.txt
,它定義了專案的結構和編譯設定。 CMakeLists.txt
應該位於專案的根目錄,並定義了所有的編譯控制。- 可以使用
add_subdirectory()
命令指定要處理的子資料夾(子專案),子資料夾內部也要有CMakeLists.txt
檔案。
- CMake的主要配置檔案是
-
指令碼檔案:
- CMake也支援使用
.cmake
字尾的指令碼檔案,但這些指令碼檔案不會直接生成構建系統。 - 要單獨執行指令碼檔案,需要使用
cmake -P xxx.cmake
命令。
- CMake也支援使用
-
專案構建流程:
- CMake首先讀取根目錄的
CMakeLists.txt
檔案,並根據其中的命令和配置生成構建檔案(如Makefile)。 - 然後,可以使用相應的構建工具(如make)來編譯專案。