当前位置: 首页 > news >正文

【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文件用于模块化配置,提高代码重用性和可维护性
• 合理使用条件编译和平台检测确保跨平台兼容性
• 模块化设计使大型项目更易于管理和维护

最佳实践:

  1. 保持pro文件简洁,将复杂配置提取到pri文件中
  2. 使用有意义的变量名和注释
  3. 为不同平台和环境提供适当的配置
  4. 实施错误检查和验证机制
  5. 使用版本控制和自动化构建
    通过熟练运用pro和pri文件,你可以构建出结构清晰、易于维护的跨平台Qt应用程序。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
qt 5.6 qmake手册,英文手册可以在Qt助手搜qmake。
QT中PRO文件写法的详细介绍,很有用,很重要!

在这里插入图片描述

http://www.dtcms.com/a/523632.html

相关文章:

  • SpringAI2-Spring AI-聊天模型:ChatClient,流式编程,ChatModel
  • [MySQL] 事务和视图
  • 建设网站的特色wordpress域名网站搬家
  • 记录画图笔记
  • 【江苏政务服务网-注册_登录安全分析报告】
  • redisson介绍
  • 20251020二分总结
  • Android 基于清单文件mate-data数据共享
  • Android中Window和LayoutParams的常用属性及常用方法介绍
  • MySQL的安装与卸载
  • 单调栈详解【C/C++】
  • 智慧用电平台让安全走在事故前面
  • 自己的商标名称可以做网站名称吗单页手机网站源码
  • 做网站设计的电脑需要什么配置公司网站首页图片素材
  • Kubernetes网络通信与Pod基础详解:从架构图看K8s核心组件
  • freeRTOS学习日记
  • 划分字母区间---超全详细解
  • 【机器学习】k近邻法
  • 如何使用vscode和express开发node.js
  • Metasploit网络嗅探实战:从数据包捕获到协议分析的完整指南
  • CICD实战(11) - 使用Arbess+GitLab实现PHP项目自动化部署
  • 南京需要做网站的公司施工企业汛期应急预案
  • HarmonyOS 超级终端与服务卡片开发:打造无缝多设备交互体验
  • TeamViewer 手机版:一键远程控制,深度管理,提升多设备管理效率
  • Day70 基于 Mailbox 机制的多线程传感器数据处理系统设计与实现
  • ORM 使用说明
  • 为什么要做手机网站百媚导航app入口app入口
  • 第八章-Tomcat调试与监控
  • 算法基础篇(8)贪心算法
  • 第二章-Tomcat核心架构拆解