【必知必会】pro文件及常用配置
前言
笔者在工作中了解到,有部分同学对Qt的项目文件,即.pro文件的基本配置编写不是很了解。作为一名Qt工程师,.pro文件的编写也是必会的技能,本文对此进行一个讲解,并将相关资料做一个汇总。
.pro文件的介绍
.pro文件是Qt的项目文件,Qt允许我们直接编辑,不像Visual Studio基本上所有项目选项都需要界面来配置。
Qt使用其自带的qmake.exe来解析.pro文件。.pro文件有自己的语法规则,所以学习起来需要一定的成本。目前我们只需要学习编写最基本的配置即可,根据二八定律,80%的情况下,我们只能用到20%的配置方法,剩余20%的情况等到我们熟悉了.pro文件以后,再去查询解决即可。二八定律学习法一定要牢牢掌握哦!
一个.pro文件的例子
打开Qt,新建一个Qt Widgets Application。笔者使用的Qt Creator版本是Qt Creator 4.0.2。
下面是.pro文件中的内容
#-------------------------------------------------
#
# Project created by QtCreator 2021-08-20T09:56:45
#
#-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = untitled13
TEMPLATE = appSOURCES += main.cpp\mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.ui
下面依次解释上面的代码各行的含义
QT += core gui
指定当前项目使用的Qt模块,Qt会自动将相关模块的头文件、库文件加入到项目配置中。只有在.pro中指定了需要使用的库,才能在项目中使用相关的功能。
比如使用网络时:QT += network;使用xml时:QT += xml,等等。
新问题:
如何知道某个Qt类在哪个库呢。在Qt手册中找到对应的类,有类所在库的信息,如下图:
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
此行的含义为:当前Qt的版本大于Qt4的话,即Qt5的话,就加入widgets模块。可见widgets模块可能是Qt5中才引入的。TARGET = untitled13
目标程序名称。就是生成出来的目标文件的文件名前缀,不包含扩展名,扩展名由项目类型决定。这里指定了untitled13,如果项目类型是应用程序,则会生成untitled13.exe;如果项目类型是动态库,则会生成untiled13.dll文件。TEMPLATE = app
指定项目模板类型,也就是项目类型。可以指定app(应用程序)、lib(库),除了这些还有其他类型,Qt文档的qmake manual部分有详细描述。SOURCES += main.cpp mainwindow.cpp
指定源代码文件列表HEADERS += mainwindow.h
指定头文件列表FORMS += mainwindow.ui
指定ui设计文件列表
其他常用配置项
DESTDIR = $$PWD/
此行代码用于指定目标文件的保存目录。
DESTDIR是英文Destination Directory的缩写,即目的文件夹。
$$PWD是一个保存当前目录路径的变量。LIBS += -L$$PWD/
此行代码同Visual Studio中的“附加库目录”功能,用于添加库文件搜索路径。LIBS += -lmylib
此行代码同Visual Studio中的“附加依赖库”功能,用于添加需要链接的库文件。可以和上面的添加库文件搜索路径写在一起,比如 LIBS += -L$$PWD -lmylib。CONFIG += staticlib
结合TEMPLATE = lib使用,指定生成静态库。CONFIG += dll
结合TEMPLATE = lib使用,指定生成动态库。INCLUDEPATH += $$PWD
用于添加头文件的包含目录。和Visual Studio中的“附加包含目录”功能一致。DEFINES += MY_MACRO
用于添加全局需要使用的宏定义。和Visual Studio中的“预处理器定义”功能一致。message($$PWD)
message是.pro中的内置函数,用于打印消息或变量,一般用于调试变量或步骤是否正确。
输出的消息会在Qt Creator底部的“概要信息”中打印。配置判断
CONFIG(debug, debug | release) {# 这里写debug下的配置内容,最常见的用法是链接debug版本第三方的库
} else {# 这里写release下的配置内容,最常见的用法是链接release版本第三方的库
}
- include(sub_module.pri)
这个非常重要。.pri是子模块配置文件,编写方式和.pro基本一样。不一样的地方就在于,它毕竟是子模块配置文件,只需要写子模块的配置信息即可,不需要写诸如 TEMPLATE = app等这种应该在pro文件中编写的配置项。
有的同学会问,.pri文件在哪创建?界面上怎么找不到?这个确实笔者也一直都没有找到,需要自己新建一个文件,将文件后缀改为.pri,最后在.pro文件中使用include包含进来。
.pri的典型用法这里举一例:用来引入第三方库。一般第三方库需要提供头文件、库文件。想要引入到Qt项目中,编写一个.pri文件就比较简单,需要用到的项目直接include这个.pri文件即可。相对于Visual Studio需要到多个界面配置第三方库,简单了很多。一个引入库的pri子模块文件内容如下图所示:
其他说明项
- 经测试,构建一次项目.pro文件可能会被执行多次。所以不能认为.pro构建一次,只执行一次,和我们想的不太一样,需要注意。
参考资料
当然是官方手册了,在Qt Assistant中,切换到“索引”,输入“qmake manual”即可找到。
结语
学会使用.pro文件真的很重要,一定要掌握最基本的配置。
后续如果有其他比较重要的配置项,会更新说明,敬请关注。
本文首发自公众号“Qt未来工程师”,欢迎关注。
【必知必会】pro文件及常用配置相关推荐
- mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)
站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...
- 操作系统必知必会:Linux(1)常用的Shell命令
操作系统必知必会:Linux(1)常用的Shell命令 常用的Shell命令 磁盘管理 cd df du mkdir pwd ls 文件管理 cat chmod chown cp diff file ...
- 《MySQL必知必会》SQL文件
<MySQL必知必会>SQL文件: 表的创建和外键绑定: # 在Mysql中取消外键约束 SET FOREIGN_KEY_CHECKS=0; DROP TABLE customers; D ...
- linux运行界别,day7 Linux下必知必会文件(2)
主要内容: 运行级别 Linux下面必知必会文件和目录 Linux启动流程 一.运行级别 1.运行级别分为0--6共七级 具体如下表: 级别 CentOS 6 (run level) CentOS 7 ...
- mysql常用的通配符_mysql必知必会--用通配符进行过滤
LIKE 操作符 前面介绍的所有操作符都是针对已知值进行过滤的.不管是匹配一 个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共 同点是过滤中使用的值都是已知的.但是,这种过滤方法并不是任 ...
- 《渗透测试实践指南 必知必会的工具与方法 (原书第2版)》读书摘录
----------------------------------------------------------------------------分割线--------------------- ...
- SpringBoot入门到精通_第6篇 _必知必会
接上一篇:SpringBoot入门到精通_第5篇 _SpringBoot Actuator监控 https://blog.csdn.net/weixin_40816738/article/detail ...
- SQL Server必知必会
SQL Server必知必会 2009-10-27-17:57:57 Structure Query Language:SQL 结构化 查询 语言 数据库产品: ...
- C++必知必会RALL与Pimpl
系列文章目录 第一章 C++必知必会 第二章 C++后端开发必备的工具和调试知识 第三章 多线程编程与资源同步 第四章 网络编程重难点解析 第五章 网络通信故障排除常用命令 第六章 网络通信协议设计 ...
最新文章
- wget,curl 下载文件
- 机器学习中你不可不知的几个算法常识
- EWSD常用状态解释
- xshell无法连接linux虚拟机问题的解决办法
- 电脑看书软件_能全平台阅读的图书软件,是kindle? No!大公司低调出品
- 【英语学习】【Level 07】U01 Making friends L6 At the park
- input hidden的值存储在哪儿_kafka内核:消息存储模块的工作机制
- ctype.h(c标准库)
- libpng12.so.0:没有那个文件或目录
- ASP.NET实现文件上传和下载
- Educational Codeforces Round 77 D.A Game with Traps(二分+差分+前缀和)
- 高速EDA设计课程报告(二)
- c语言-手撕多级时间轮定时器(纯手写)
- TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
- 科来kelai工具的安装与使用-改包回放包工具
- 第二讲:线性结构-Go语言实现
- 海桂嘉积中学2021高考成绩查询,圆梦行动 “我想做记者,我想学计算机” 屯昌文武山村“高考姐妹花”的美好心愿...
- 高伟达业绩暴雷的背后:主业几乎被掏空,利润被并购企业深度捆绑
- 基于paddlepaddle构建resnet神经网络的蝴蝶分类
- MIME::Base64, encode_base64(), decode_base64()
热门文章
- 华为基于策略划分VLAN的配置方法及示例
- Java概览(java语言编程艺术笔记)
- 巧克力情歌手---McKnight, Brian
- matlab如何找出最小的数据,读取数据并找出全部数据的最大值和最小值
- matlab窗函数带通滤波器,Matlab结合窗函数法设计数字带通FIR滤波器
- java实现坐标图进行拖拉拽放_js实现限定区域范围拖拉拽效果
- td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...
- 结构体内存拷贝的两种方法
- c json输出html标签,Json编码HTML字符串
- python图片保存为txt文件_python + opencv实现提取png图像的像素信息并存储到txt文件中(附安装指导)...