Qt/C++ 项目 pro` 文件管理办法

适用于大型 Qt/C++ 项目 ,可以把一个很大的 .pro 文件拆分成多个子文件,方便维护。


一、为什么要拆分 .pro

.pro 文件很大时(例如几百个 .cpp 文件),会出现:

  • .pro 文件过长,不好维护
  • Git diff 很混乱
  • 不同模块代码混在一起
  • 新人很难理解工程结构

Qt 提供了 .pri 子项目文件 来解决这个问题。

.pri 文件可以被 .pro 文件 include


二、基本原理

Qt 支持:

pro 复制代码
include(file.pri)

.pri 文件可以包含:

  • SOURCES
  • HEADERS
  • INCLUDEPATH
  • LIBS
  • DEFINES
  • CONFIG

所以 .pri 可以看成 .pro 的子模块


三、示例工程结构

假设有一个项目:

复制代码
Project
│
├── project.pro
├── pri
│   ├── module_algorithm.pri
│   ├── module_controller.pri
│   ├── module_driver.pri
│   ├── module_thread.pri
│
└── src
    ├── algorithm
    ├── controller
    ├── driver
    └── thread

四、主 .pro 文件

主工程只保留 全局配置include 子模块

pro 复制代码
QT += core network

CONFIG += c++17

# 全局宏
DEFINES += PROJECT_ENABLE_LOG

# 引入子模块
include(pri/module_algorithm.pri)
include(pri/module_controller.pri)
include(pri/module_driver.pri)
include(pri/module_thread.pri)

.pro 文件通常只有 几十行


五、模块 .pri 文件

例如:

module_algorithm.pri

pro 复制代码
SOURCES += \
    src/algorithm/algorithm1.cpp \
    src/algorithm/algorithm2.cpp

HEADERS += \
    src/algorithm/algorithm1.h \
    src/algorithm/algorithm2.h

INCLUDEPATH += \
    src/algorithm

module_controller.pri

pro 复制代码
SOURCES += \
    src/controller/controller1.cpp \
    src/controller/controller2.cpp

HEADERS += \
    src/controller/controller1.h \
    src/controller/controller2.h

INCLUDEPATH += \
    src/controller

module_driver.pri

pro 复制代码
SOURCES += \
    src/driver/driver1.cpp \
    src/driver/driver2.cpp

HEADERS += \
    src/driver/driver1.h \
    src/driver/driver2.h

INCLUDEPATH += \
    src/driver

六、编译方式

拆分后:

  • 编译方式不变

  • 仍然执行:

    qmake
    make

Qt 会自动把 .pri 内容合并到 .pro


七、模块划分建议

大型 Qt 项目通常按模块拆分:

模块 内容
algorithm 算法
controller 控制逻辑
driver 硬件驱动
protocol 通信协议
thread 线程
system 系统管理

例如:

复制代码
pri
 ├── algorithm.pri
 ├── controller.pri
 ├── driver.pri
 ├── protocol.pri
 └── thread.pri

八、常见高级用法

条件编译

pro 复制代码
unix {
    LIBS += -lpthread
}

win32 {
    LIBS += -lws2_32
}

架构判断

pro 复制代码
contains(QT_ARCH, x86_64) {
    message("x86 platform")
}

contains(QT_ARCH, arm64) {
    message("ARM64 platform")
}

定义宏

pro 复制代码
DEFINES += ENABLE_DEBUG

代码中:

cpp 复制代码
#ifdef ENABLE_DEBUG
qDebug()<<"debug mode";
#endif

九、.pro.pri 区别

文件 作用
.pro Qt 工程入口
.pri 子模块配置

.pri 不能单独编译 ,必须被 .pro include。


十、适合使用 .pri 的项目规模

推荐在以下情况使用:

文件数量 建议
< 50 .pro
50 ~ 200 .pri
> 200 .pri
> 1000 SUBDIRS 多工程

十一、更大的工程结构(工业项目)

大型 Qt 项目一般结构:

复制代码
Project
│
├── project.pro
├── pri
│   ├── algorithm.pri
│   ├── controller.pri
│   ├── driver.pri
│   ├── protocol.pri
│   ├── media.pri
│   └── thread.pri
│
├── src
│   ├── algorithm
│   ├── controller
│   ├── driver
│   ├── protocol
│   ├── media
│   └── thread

十二、优点

拆分 .pro 后:

  • 工程结构更清晰
  • 不同模块独立维护
  • Git 冲突减少
  • 新人更容易理解

相关推荐
冉佳驹10 小时前
Qt【第五篇】——— QMainWindow 核心组件与对话框开发详解
qt·qdialog·qtoolbar·qstatusbar·qdockwidget·qmenubar
cpp_learners12 小时前
银河麒麟V10+飞腾D2000/8处理器+在线源码编译安装Firefox78.0指南
qt·firefox·麒麟
Frank_refuel13 小时前
QT->信号与槽详解上(概述、使用、自定义、连接方式、其他说明)
开发语言·qt
不想看见40416 小时前
在AI时代下,刷LeetCode题的价值与意义
开发语言·c++·qt
yunn_19 小时前
Qt 多线程
c++·qt
ada0_ada120 小时前
Qt的Widgets项目
开发语言·qt
Dovis(誓平步青云)20 小时前
《QT学习第一篇:QT的概述与安装、信号与槽》
开发语言·qt·学习·功能详解
地下核武1 天前
Ubuntu 24.04 在线安装 Qt 6.10.2 后 Qt Creator 无法启动问题记录与解决
linux·qt·ubuntu
史蒂芬_丁1 天前
Qt, C++数据类型扩展问题
数据库·c++·qt
没用的阿_吉1 天前
windows10 Qt5.15.14 msvc2019 编译部署
开发语言·qt