本文来源 : 腾讯元宝
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,但当前配置已满足多数场景。