cmake構建Qt外掛

李小飞11發表於2024-05-31

cmake構建Qt外掛

為什麼要使用外掛

在進行大型客戶端專案的開發時,往往需要分成很多的功能模組,這是架構在設計時候就必須考慮的,良好的架構應該易於擴充套件,使用動態庫就可以很好的實現,但是動態庫使用中會使用到具體的定義,高層模組反而依賴於底層模組的實現,這是不符合設計模式中依賴反轉的,動態庫的改變就要主程式重新編譯,外掛就解決了這個問題,外掛基於主程式提供介面的來實現,很好的實現了依賴反轉,高層模組不應該依賴於底層模組,而應該使底層模組依賴於高層模組的抽象介面。使用外掛後,外掛模組的重新編譯或者缺少都不會影響主程式的正常執行,只會造成對應模組功能的缺少。

Qt外掛簡介

外掛是過載了虛擬函式的dll,這跟抽象工廠類類似,這便是外掛的原理。Qt的外掛可以說是一種動態庫在函式中,我們匯入Interface介面檔案,也就是外掛介面檔案,不需要依賴靜態庫生成程式碼,類似C/C++關鍵字extern。而在最後我們透過系統的API載入dll或者so,這個可以自行百度查閱 “動態庫載入的兩種方式”。這樣做的好處:定義開發正規化,面向Interface程式設計,內部封裝,模組和整體流程開發分離,提高開發效率。應用場景QtCreator-IDE、WPS、visual studio、Nodepad++等等,都是採用這種開發方式。

如何使用Qt外掛

  1. 定義一個介面集(只有純虛擬函式的類)。
  2. 用宏Q_DECLARE_INTERFACE()將該介面告訴 Qt 元物件系統
  3. 宣告外掛類,外掛類繼承自 QObject 和外掛實現的介面。
  4. 用宏Q_INTERFACES()將外掛介面告訴 Qt 元物件系統(在標頭檔案中)。
  5. 用適當的qmke或者cmake檔案構建外掛。

cmake是什麼

回顧學習c語言時候就知道了c語言的執行步驟是預處理,編譯,彙編,連結,如果是單檔案我們可以在cmd中使用gcc命名直接編譯成可執行程式,但是在專案中,會有許多的檔案,各個檔案之間又有各種依賴關係,以及需要使用各種資原始檔,如圖片,影片音訊等,這種情況下就需要使用專案組織檔案了。而cmake就是其中一種跨平臺的,目前使用範圍最廣。cmake可以說是現在的趨勢,Qt官方也鼓勵使用cmake構建程式。

使用cmake構建Qt外掛

為了熟悉cmake的使用,可以在外掛中使用cmake組織外掛工程,外掛不會影響到主程式。

CMake的基礎語法可以大致歸納為以下幾個主要部分:

  1. 註釋

    • 在CMake中,註釋使用#字元開始,並持續到該行結束。
  2. 命令

    • CMake的命令不區分大小寫(但引數會區分大小寫)。
    • 命令由命令名和引數列表組成,引數之間使用空格進行分隔。
    • 使用一對雙引號包括的字串被認為是一個引數。
    • 命令可以是一個內建命令(如project, add_executable等),也可以是一個使用者定義的宏(macro)或者函式(function)。
  3. 資料型別

    • CMake的基本資料型別是字串。
    • 一組字串在一起稱為列表(list)。
    • 使用${VariableName}語法來訪問變數的值(變數名區分大小寫)。
    • 可以在字串內部使用${VariableName}來訪問變數的值。
    • 使用$ENV{VariableName}來訪問環境變數的值。
  4. 條件控制和迴圈結構

    • 使用if命令進行條件控制。
    • 條件控制命令的語法為:
      if(expression)
          # ...
      elseif(expression2)
          # ...
      else()
          # ...
      endif()
      
    • 條件表示式可以包括變數和邏輯運算子(如AND, OR, NOT等)。
  5. 變數與引數

    • CMake提供了豐富的變數和引數,用於控制專案的構建過程。
    • 常用的變數包括:
      • CMAKE_INSTALL_PREFIX:安裝路徑的字首。
      • CMAKE_BUILD_TYPE:構建型別,如DebugRelease等。
      • CMAKE_CXX_STANDARD:C++標準。
    • 變數可以透過set命令進行設定。
  6. 函式與命令

    • CMake提供了豐富的函式和命令,用於實現各種功能。
    • 常用的函式包括:
      • add_executable:新增可執行檔案。
      • add_library:新增庫檔案。
      • target_link_libraries:連結庫檔案。
    • 常用的命令包括:
      • set:設定變數。
  7. CMakeLists.txt檔案

    • CMake的主要配置檔案是CMakeLists.txt,它定義了專案的結構和編譯設定。
    • CMakeLists.txt應該位於專案的根目錄,並定義了所有的編譯控制。
    • 可以使用add_subdirectory()命令指定要處理的子資料夾(子專案),子資料夾內部也要有CMakeLists.txt檔案。
  8. 指令碼檔案

    • CMake也支援使用.cmake字尾的指令碼檔案,但這些指令碼檔案不會直接生成構建系統。
    • 要單獨執行指令碼檔案,需要使用cmake -P xxx.cmake命令。
  9. 專案構建流程

  • CMake首先讀取根目錄的CMakeLists.txt檔案,並根據其中的命令和配置生成構建檔案(如Makefile)。
  • 然後,可以使用相應的構建工具(如make)來編譯專案。

相關文章