目录
[Qt pro 多项目、子目录、多层级配置(超级详细 + 实战模板)](#Qt pro 多项目、子目录、多层级配置(超级详细 + 实战模板))
[二、最外层总 pro(关键!)](#二、最外层总 pro(关键!))
[三、子项目 pro 写法](#三、子项目 pro 写法)
[1. 库项目 CoreLib.pro](#1. 库项目 CoreLib.pro)
[2. 主程序 App.pro](#2. 主程序 App.pro)
[第二层 Libraries.pro](#第二层 Libraries.pro)
[总 Project.pro](#总 Project.pro)
[1. 统一输出目录(所有 exe、dll 放一起)](#1. 统一输出目录(所有 exe、dll 放一起))
[2. 子项目共享配置](#2. 子项目共享配置)
[3. 指定只编译某些模块](#3. 指定只编译某些模块)
[六、总结(面试 + 实战必背)](#六、总结(面试 + 实战必背))
[1. 多项目核心](#1. 多项目核心)
[2. 优点](#2. 优点)
[3. 一句话面试答案](#3. 一句话面试答案)
[手把手教你:Qt Creator 中配置多项目子目录(subdirs)](#手把手教你:Qt Creator 中配置多项目子目录(subdirs))
[二、第 1 步:创建「总工程」(最关键)](#二、第 1 步:创建「总工程」(最关键))
[三、第 2 步:往总工程里添加「子项目」](#三、第 2 步:往总工程里添加「子项目」)
[四、第 3 步:Qt Creator 会自动帮你配置好!](#四、第 3 步:Qt Creator 会自动帮你配置好!)
[五、第 4 步:配置「依赖关系」(必须做)](#五、第 4 步:配置「依赖关系」(必须做))
[六、第 5 步:让主程序 App 能使用库](#六、第 5 步:让主程序 App 能使用库)
[七、第 6 步:统一输出目录(所有 exe、dll 放一起)](#七、第 6 步:统一输出目录(所有 exe、dll 放一起))
[八、最终效果(Qt Creator 里长这样)](#八、最终效果(Qt Creator 里长这样))
[九、超级重点总结(Qt Creator 多项目口诀)](#九、超级重点总结(Qt Creator 多项目口诀))
Qt pro 多项目、子目录、多层级配置(超级详细 + 实战模板)
这是Qt 大型项目必备技能 ,也是面试高频题 ,我给你讲最清晰、最标准、可直接落地的多层级 pro 配置方案。
一、核心概念:什么是多项目子目录(subdirs)?
一个大项目分成多个小项目 ,每个小项目有自己的 .pro,最外层用一个总 pro 管理它们。
典型项目结构(最标准)
plaintext
MyBigProject/ # 总工程
├── MyBigProject.pro # 总配置(TEMPLATE = subdirs)
├── App/ # 主程序(exe)
│ ├── App.pro
│ └── main.cpp
├── CoreLib/ # 核心库(dll/lib)
│ ├── CoreLib.pro
│ └── xxx.cpp
└── UiTools/ # 工具库
├── UiTools.pro
└── xxx.cpp
核心规则
- 总 pro :
TEMPLATE = subdirs - 子 pro :
app或lib - 总 pro 用 SUBDIRS 管理子项目
- 可配置编译顺序、依赖关系
二、最外层总 pro(关键!)
MyBigProject.pro
qmake
TEMPLATE = subdirs # 必须是 subdirs
# 子项目目录
SUBDIRS += \
CoreLib \
UiTools \
App
# 编译顺序 + 依赖(非常重要)
App.depends = CoreLib UiTools
UiTools.depends = CoreLib
SUBDIRS:列出所有子项目文件夹名xxx.depends:谁依赖谁 ,控制编译顺序例子:App必须等CoreLib和UiTools先编译完
三、子项目 pro 写法
1. 库项目 CoreLib.pro
qmake
QT += core gui
TEMPLATE = lib # 库
TARGET = CoreLib
DESTDIR = $$PWD/../bin # 输出到统一目录
SOURCES += xxx.cpp
HEADERS += xxx.h
2. 主程序 App.pro
qmake
QT += core gui widgets
TEMPLATE = app # 可执行程序
TARGET = App
DESTDIR = $$PWD/../bin
# 引用库
INCLUDEPATH += $$PWD/../CoreLib
LIBS += -L$$PWD/../bin -lCoreLib
SOURCES += main.cpp
四、多层级嵌套(子目录里还有子目录)
支持无限层级,例如:
plaintext
Project/
├── Project.pro
├── App/
├── Libraries/
│ ├── Libraries.pro
│ ├── Network/
│ └── Database/
└── Tools/
第二层 Libraries.pro
qmake
TEMPLATE = subdirs
SUBDIRS += Network Database
总 Project.pro
qmake
TEMPLATE = subdirs
SUBDIRS += Libraries App Tools
五、最常用高级配置
1. 统一输出目录(所有 exe、dll 放一起)
qmake
# 在 总 pro 里配置
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/bin/debug
} else {
DESTDIR = $$PWD/bin/release
}
2. 子项目共享配置
创建一个 common.pri 文件,所有子 pro 引用:
qmake
include($$PWD/common.pri)
3. 指定只编译某些模块
qmake
SUBDIRS += App CoreLib
CONFIG += ordered # 按顺序编译
六、总结(面试 + 实战必背)
1. 多项目核心
- 总工程 :
TEMPLATE = subdirs - 子工程 :
app/lib - 用 SUBDIRS 管理子项目
- 用 xxx.depends 管理依赖顺序
2. 优点
- 代码解耦
- 模块化
- 大型项目必备
- 方便团队开发
3. 一句话面试答案
Qt 多项目使用 subdirs 模板,总 pro 管理子 pro,可配置编译顺序与依赖,实现模块化分层架构。
手把手教你:Qt Creator 中配置多项目子目录(subdirs)
我用最傻瓜、一步步、可直接照做 的方式教你,5 分钟搞定多层级多 pro 工程!
一、最终要做成的项目结构(先看结果)
plaintext
MyProject/ 👈 总工程
├── MyProject.pro 👈 总 pro(subdirs)
├── App/ 👈 主程序(exe)
│ └── App.pro
├── CoreLib/ 👈 核心库(dll)
│ └── CoreLib.pro
└── Utils/ 👈 工具库(dll)
└── Utils.pro
二、第 1 步:创建「总工程」(最关键)
打开 Qt Creator → 新建项目
- 选择 Other Project → Subdirs Project
- 项目名:
MyProject - 完成创建
✅ 自动生成的 MyProject.pro 内容:
qmake
TEMPLATE = subdirs
SUBDIRS += \
# 这里以后会自动/手动加入子项目
三、第 2 步:往总工程里添加「子项目」
右键点击总工程 → 新子项目
可以添加两种:
- App → 生成 exe
- Library → 生成 dll/lib
依次添加:
App(Application)CoreLib(Library)Utils(Library)
四、第 3 步:Qt Creator 会自动帮你配置好!
添加完后,你会发现:
✅ MyProject.pro 自动变成:
qmake
TEMPLATE = subdirs
SUBDIRS += \
App \
CoreLib \
Utils
Qt Creator 全部自动配置,不用你手写路径!
五、第 4 步:配置「依赖关系」(必须做)
比如:
- App 依赖 CoreLib 和 Utils
- Utils 依赖 CoreLib
打开 MyProject.pro,在最后加:
qmake
# 编译顺序:先编译被依赖的,再编译依赖的
App.depends = CoreLib Utils
Utils.depends = CoreLib
✅ 这样 Qt Creator 就会按正确顺序编译!
六、第 5 步:让主程序 App 能使用库
打开 App.pro,添加库的路径:
qmake
# 头文件路径
INCLUDEPATH += $$PWD/../CoreLib \
$$PWD/../Utils
# 链接库
LIBS += -L$$PWD/../bin -lCoreLib -lUtils
七、第 6 步:统一输出目录(所有 exe、dll 放一起)
在 MyProject.pro 里加:
qmake
# 所有子项目的输出目录都统一到 bin
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/bin/debug
} else {
DESTDIR = $$PWD/bin/release
}
所有子项目会自动继承这个路径,不用每个都配!
八、最终效果(Qt Creator 里长这样)
plaintext
MyProject
├─ App
├─ CoreLib
└─ Utils
- 点运行 → 自动编译所有子项目
- 点清理 → 全部清理
- 调试、运行、跳转定义全部正常
九、超级重点总结(Qt Creator 多项目口诀)
- 总工程 = Subdirs Project
- 子项目 = 右键添加新子项目
- 编译顺序 = .depends
- 路径统一 = 总 pro 里写 DESTDIR
- Qt Creator 自动管理,不用手写复杂路径
具体案例可看下篇文章