【Qt | .pro文件】Qt项目文件详解:pro文件与pri文件
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍Qt的.pro文件 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、.pro 文件基础语法结构
- ✨2.1 .pro 文件的变量
- TEMPLATE 变量
- TARGET 变量
- QT 变量
- CONFIG 变量
- 文件路径 变量
- DEFINES 变量
- ✨2.2 .pro 文件的平台特定配置
- ✨2.3 .pro 文件的条件编译
- 🎄三、.pri 文件介绍
- ✨3.1 .pri 文件的使用场景
- ✨3.2 .pri 文件的高级技巧
- 🎄四、总结

![]()
🎄一、概述
刚开始学Qt时,可能会比较少关注到 .pro文件 和 .pri文件,一般都以为这些文件可以直接让 Qt Creator 来帮我们生成,不需要自己写。但是,如果Qt项目的源文件比较多了,需要分模块、分目录来管理源文件时,可能就了解.pro文件、.pri文件的相关语法,并自己修改或实现pro文件了。
pro文件和pri文件 是Qt构建系统(qmake)的核心,负责定义项目的结构、依赖关系和构建规则。理解这两种文件的用法对于高效开发Qt应用程序至关重要:
-
.pro文件:又称 项目文件,是Qt项目的主要配置文件,每个Qt项目至少有一个.pro文件。它告诉 qmake 如何为项目生成适当的 Makefile。 -
.pri文件:项目包含文件,是用于模块化配置的包含文件,可以在多个pro文件中重用。它们帮助组织大型项目,减少代码重复。
一般情况下,如果Qt项目的源码比较简单,可以在命令行跳转到源码目录,执行下面命令让qmake帮我们生成一个.pro文件,再生成Makefile:
qmake -project
qmake xxx.pro
这里大概清楚了 pro 文件、pri文件的概念,那这两个文件怎么写呢?怎么使用呢?下面
![]()
🎄二、.pro 文件基础语法结构
这个小节介绍 pro 文件的语法结构,需要注意的是,.pro文件 和 pri文件 的语法结构是一样的。
首先,看看下面这个 pro 文件,有个了解:
# 注释以#开头# 模板类型 - 定义项目类型
TEMPLATE = app# 项目名称
TARGET = MyApplication# Qt模块依赖
QT += core gui widgets# 配置选项
CONFIG += c++17 warn_on# 源文件列表
SOURCES += main.cpp \mainwindow.cpp \widget.cpp# 头文件列表
HEADERS += mainwindow.h \widget.h# 资源文件
RESOURCES = resources.qrc# UI文件
FORMS = mainwindow.ui
✨2.1 .pro 文件的变量
这个小节介绍 .pro 文件的变量,这里先介绍变量赋值时可能遇到的几个内容:
- 1、可以使用
=给一个变量赋值,也可以使用+=在该变量原有的值再加上+=后的值; - 2、如果给一个想给一个变量赋多个值,各个值直接需要空格分开,例如:
QT += svg core gui - 3、可以在变量名前加
$$来读取变量的值,例如DESTDIR = $$PWD/../../bin
TEMPLATE 变量
TEMPLATE 变量用于构建项目类型,如果pro文件没有声明这个变量,qmake会默认按照应用程序(app)来生成Makefile。TEMPLATE 变量包括但不限于下面几个取值:
app:默认值,构建应用程序;lib:构建一个库;subdirs:一般配合SUBDIRS变量一起使用,会生成 Makefile 文件编译SUBDIRS指定的文件夹,每个子文件夹都必须有自己的pro文件;aux:不需要构建任何东西
TEMPLATE = app # 应用程序(默认)
TEMPLATE = lib # 库文件
TEMPLATE = subdirs # 子目录项目
TEMPLATE = aux # 不需要构建任何东西
TARGET 变量
指定生成的目标文件名,如果不设置该变量,目标文件名会被自动设置为跟pro文件一样的名字:
TARGET = MyApp
QT 变量
指定项目中使用的 QT 模块列表。
QT += core gui # 基础模块
QT += widgets # 桌面组件
QT += network # 网络功能
QT += sql # 数据库
QT += multimedia # 多媒体
QT += charts # 图表
QT += webenginewidgets # Web引擎
CONFIG 变量
配置项目的编译选项。
CONFIG 变量包括但不限于下面几个取值:
ordered:表示子项目按照添加的顺序来编译;debug:应用程序以debug(调试)模式编译,;release:应用程序以release(发布)模式编译;warn_on:编译器输出尽可能多的警告信息;warn_off:编译器输出尽可能少的警告信息;qt:这是一个Qt应用程序,并且会链接Qt库;thread:目标程序是一个多线程程序;staticlib:只适用于lib模板,表示目标库是一个静态库;console:只适用于app模板,表示这是一个控制台应用程序;plugin:只适用于lib模板,表示目标库是一个插件;
CONFIG += c++17 # C++标准
CONFIG += warn_on # 开启警告
CONFIG += debug # 调试模式
CONFIG += release # 发布模式
CONFIG += console # 控制台应用
CONFIG += precompile_header # 预编译头文件
文件路径 变量
SOURCES:指定源文件,多个源文件时需要用空格分隔开,也可以使用+=来增加源文件;HEADERS:指定头文件;FORMS:指定需要由uic处理的UI文件;RESOURCES:指定资源文件;TRANSLATIONS:翻译文件;LIBS:指定库路径-Lxxx,或指定要链接的库-lxxx;DESTDIR:生成可执行程序或二进制文件的目录;OBJECTS_DIR:指定放置中间对象的目录;MOC_DIR:指定放置所有moc中间文件的目录;RCC_DIR:指定 rcc 命令将.qrc文件转换成qrc_*.h文件存放目录;UI_DIR:指定 uic 命令将.ui文件转换成ui_*.h文件的存放目录;
# 源文件和头文件
SOURCES += src/main.cpp src/utils.cpp
HEADERS += include/mainwindow.h include/utils.h# UI文件和资源文件
FORMS += ui/mainwindow.ui ui/dialog.ui
RESOURCES += resources/icons.qrc resources/images.qrc# 翻译文件
TRANSLATIONS += translations/app_zh_CN.ts \translations/app_en_US.ts# 包含路径
INCLUDEPATH += include /usr/local/include# 库路径
LIBS += -L/usr/local/lib -L$$PWD/lib# 链接库
LIBS += -lmylibrary -lmyotherlib# 输出目录
DESTDIR = $$PWD/bin
OBJECTS_DIR = $$PWD/build/obj
MOC_DIR = $$PWD/build/moc
RCC_DIR = $$PWD/build/rcc
UI_DIR = $$PWD/build/ui
DEFINES 变量
定义宏。qmake将此变量的值添加为编译器C预处理宏(-D选项)。
DEFINES += 3531A
✨2.2 .pro 文件的平台特定配置
# Windows平台
win32 {LIBS += -luser32 -ladvapi32RC_FILE = app.rcDEFINES += WIN32 _WIN32
}# Linux平台
unix:!macx {LIBS += -lpthread -lrtDEFINES += LINUX
}# macOS平台
macx {LIBS += -framework CocoaICON = app.icnsQMAKE_INFO_PLIST = Info.plist
}
✨2.3 .pro 文件的条件编译
exists()函数可以检查文件是否存在;
# 调试和发布模式
CONFIG(debug, debug|release) {TARGET = $$join(TARGET,,,_debug)DEFINES += DEBUG_MODE QT_DEBUGQMAKE_CXXFLAGS += -g -O0
} else {DEFINES += RELEASE_MODE QT_NO_DEBUGQMAKE_CXXFLAGS += -O2 -s
}# 功能开关
CONFIG += enable_network
contains(CONFIG, enable_network) {QT += networkDEFINES += WITH_NETWORK
}# 文件存在检查
exists($$PWD/config/custom.h) {DEFINES += HAVE_CUSTOM_CONFIG
} else {warning("custom.h not found, using defaults")
}
![]()
🎄三、.pri 文件介绍
.pri文件(项目包含文件)是用于模块化配置的包含文件,可以在多个pro文件中重用。它们帮助组织大型项目,减少代码重复。
一般情况下,可以像下面代码一样将 pri 文件包含到 pro 文件中:
# 在pro文件中包含pri文件
include(common.pri)
include($$PWD/config.pri)
include($$PWD/modules/core/core.pri)
✨3.1 .pri 文件的使用场景
通用配置共享
# common.pri - 通用配置# 编译器设置
QMAKE_CXXFLAGS += -Wall -Wextra
QMAKE_CXXFLAGS_RELEASE += -O2
QMAKE_CXXFLAGS_DEBUG += -g -O0# 平台特定设置
win32 {DEFINES += _CRT_SECURE_NO_WARNINGSQMAKE_CXXFLAGS += -MP
}unix {QMAKE_CXXFLAGS += -fPIC
}
模块配置
# core.pri - 核心模块配置# 包含路径
INCLUDEPATH += $$PWD/include/core
DEPENDPATH += $$PWD/include/core# 源文件
SOURCES += $$PWD/src/core/*.cpp \$$PWD/src/core/utils/*.cppHEADERS += $$PWD/include/core/*.h \$$PWD/include/core/utils/*.h# 模块定义
DEFINES += CORE_MODULE_VERSION=1.0.0# 依赖
QT += core
第三方库集成
# thirdparty.pri - 第三方库配置# OpenCV配置
CONFIG += link_pkgconfig
PKGCONFIG += opencv4# 或者手动配置
# INCLUDEPATH += /usr/local/include/opencv4
# LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgproc# 自定义库
MY_LIB_PATH = $$PWD/thirdparty/mylib
INCLUDEPATH += $$MY_LIB_PATH/include
LIBS += -L$$MY_LIB_PATH/lib -lmylib
✨3.2 .pri 文件的高级技巧
变量作用域
# 定义作用域变量
defineReplace(myFunction) {# 处理参数INPUT = $$1OUTPUT = $$replace(INPUT, .cpp, .o)return($$OUTPUT)
}# 使用函数
OBJECT_FILES = $$myFunction($$SOURCES)
条件包含
# 根据条件包含不同配置
CONFIG(debug, debug|release) {include(debug_settings.pri)
} else {include(release_settings.pri)
}# 平台特定包含
win32 {include(windows_libs.pri)
}
unix:!macx {include(linux_libs.pri)
}
macx {include(macos_libs.pri)
}
![]()
🎄四、总结
pro文件和pri文件是Qt项目管理的核心,掌握它们的使用可以显著提高开发效率:
关键要点:
• pro文件是项目主配置文件,定义项目的基本结构和构建规则
• pri文件用于模块化配置,提高代码重用性和可维护性
• 合理使用条件编译和平台检测确保跨平台兼容性
• 模块化设计使大型项目更易于管理和维护
最佳实践:
- 保持pro文件简洁,将复杂配置提取到pri文件中
- 使用有意义的变量名和注释
- 为不同平台和环境提供适当的配置
- 实施错误检查和验证机制
- 使用版本控制和自动化构建
通过熟练运用pro和pri文件,你可以构建出结构清晰、易于维护的跨平台Qt应用程序。

如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
参考:
qt 5.6 qmake手册,英文手册可以在Qt助手搜qmake。
QT中PRO文件写法的详细介绍,很有用,很重要!

