本文來源 : 騰訊元寶
subdirs : 子目錄
TEMPLATE = subdirs
的作用??
??核心功能??:聲明當前項目為“多項目管理”模式。Qt 的構建系統(qmake)會遍歷?
SUBDIRS
中列出的子目錄,在每個子目錄中尋找?.pro
文件并遞歸構建。??適用場景??:大型項目需拆分為獨立模塊(如庫、可執行程序、測試模塊),每個模塊有自己的工程文件(
.pro
)。
SUBDIRS
變量定義子模塊
SUBDIRS = \src \demo \examples
含義??:
項目包含三個子模塊:
src
、demo
、examples
。每個子模塊必須有自己的工程文件(如?
src/src.pro
、demo/demo.pro
)。
??編譯順序??:
默認并行編譯(無依賴時順序不確定)。
若需強制順序編譯,需添加?
CONFIG += ordered
(此處未使用)。
依賴聲明:demo.depends
與?examples.depends
demo.depends = src
examples.depends = src
作用??:顯式定義子模塊間的編譯依賴關系。
demo
依賴?src
→ 先編譯?src
,再編譯?demo
。examples
依賴?src
→ 先編譯?src
,再編譯?examples
。
src
作為基礎庫,必須優先構建完成,否則?demo
和?examples
鏈接時會報錯(找不到庫或頭文件)。
實際構建流程??
??初始化??:qmake 解析主工程文件,識別?
subdirs
模板。??遍歷子目錄??:
按?
SUBDIRS
順序(src
→?demo
→?examples
)進入子目錄。??依賴干預??:檢測到?
demo.depends=src
和?examples.depends=src
,強制先構建?src
。
??編譯順序??:
第一階段:編譯?
src
(生成靜態庫/動態庫)。第二階段:并行編譯?
demo
和?examples
(兩者無依賴關系)。
總結
??依賴管理??:通過?
.depends
屬性聲明模塊間編譯順序,避免手動維護構建順序的復雜性。??項目結構??:
src
作為核心庫,demo
和?examples
作為應用層,符合模塊化設計原則。??適用性??:適合中小型 Qt 項目;超大型項目(如跨平臺復雜依賴)可考慮遷移至 CMake,但當前配置已滿足多數場景。