百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

「必知必会」pro文件及常用配置 pro文件怎么写

liebian365 2024-11-11 14:45 35 浏览 0 评论

前言

笔者在工作中了解到,有部分同学对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 gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled13
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += 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中的“预处理器定义”功能一致。

  • TRANSLATIONS += en_zh.ts

指定翻译文件。关于翻译文件会在国际化的相关文章中说明。

  • 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未来工程师”。

相关推荐

go语言也可以做gui,go-fltk让你做出c++级别的桌面应用

大家都知道go语言生态并没有什么好的gui开发框架,“能用”的一个手就能数的清,好用的就更是少之又少。今天为大家推荐一个go的gui库go-fltk。它是通过cgo调用了c++的fltk库,性能非常高...

旧电脑的首选系统:TinyCore!体积小+精简+速度极快,你敢安装吗

这几天老毛桃整理了几个微型Linux发行版,准备分享给大家。要知道可供我们日常使用的Linux发行版有很多,但其中的一些发行版经常会被大家忽视。其实这些微型Linux发行版是一种非常强大的创新:在一台...

codeblocks和VS2019下的fltk使用中文

在fltk中用中文有点问题。英文是这样。中文就成这个样子了。我查了查资料,说用UTF-8编码就行了。edit->Fileencoding->UTF-8然后保存文件。看下下边的编码指示确...

FLTK(Fast Light Toolkit)一个轻量级的跨平台Python GUI库

FLTK(FastLightToolkit)是一个轻量级的跨平台GUI库,特别适用于开发需要快速、高效且简单界面的应用程序。本文将介绍Python中的FLTK库,包括其特性、应用场景以及如何通过代...

中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

IT之家1月29日消息,去年6月份,中科院大学教授、中科院计算所研究员包云岗,发布了开源高性能RISC-V处理器核心——香山。近日,包云岗在社交平台晒出图片,香山芯片已流片,回片后...

Linux 5.13内核有望合并对苹果M1处理器支持的初步代码

预计Linux5.13将初步支持苹果SiliconM1处理器,不过完整的支持工作可能还需要几年时间才能完全完成。虽然Linux已经可以在苹果SiliconM1上运行,但这需要通过一系列的补丁才能...

Ubuntu系统下COM口测试教程(ubuntu port)

1、在待测试的板上下载minicom,下载minicom有两种方法:方法一:在Ubuntu软件中心里面搜索下载方法二:按“Ctrl+Alt+T”打开终端,打开终端后输入“sudosu”回车;在下...

湖北嵌入式软件工程师培训怎么选,让自己脱颖而出

很多年轻人毕业即失业、面试总是不如意、薪酬不满意、在家躺平。“就业难”该如何应对,参加培训是否能改变自己的职业走向,在湖北,有哪些嵌入式软件工程师培训怎么选值得推荐?粤嵌科技在嵌入式培训领域有十几年经...

新阁上位机开发---10年工程师的Modbus总结

前言我算了一下,今年是我跟Modbus相识的第10年,从最开始的简单应用到协议了解,从协议开发到协议讲解,这个陪伴了10年的协议,它一直没变,变的只是我对它的理解和认识。我一直认为Modbus协议的存...

创建你的第一个可运行的嵌入式Linux系统-5

@ZHangZMo在MicrochipBuildroot中配置QT5选择Graphic配置文件增加QT5的配置修改根文件系统支持QT5修改output/target/etc/profile配置文件...

如何在Linux下给zigbee CC2530实现上位机

0、前言网友提问如下:粉丝提问项目框架汇总下这个网友的问题,其实就是实现一个网关程序,内容分为几块:下位机,通过串口与上位机相连;下位机要能够接收上位机下发的命令,并解析这些命令;下位机能够根据这些命...

Python实现串口助手 - 03串口功能实现

 串口调试助手是最核心的当然是串口数据收发与显示的功能,pzh-py-com借助的是pySerial库实现串口收发功能,今天痞子衡为大家介绍pySerial是如何在pzh-py-com发挥功能的。一、...

为什么选择UART(串口)作为调试接口,而不是I2C、SPI等其他接口

UART(通用异步收发传输器)通常被选作调试接口有以下几个原因:简单性:协议简单:UART的协议非常简单,只需设置波特率、数据位、停止位和校验位就可以进行通信。相比之下,I2C和SPI需要处理更多的通...

同一个类,不同代码,Qt 串口类QSerialPort 与各种外设通讯处理

串口通讯在各种外设通讯中是常见接口,因为各种嵌入式CPU中串口标配,工业控制中如果不够还通过各种串口芯片进行扩展。比如spi接口的W25Q128FV.对于软件而言,因为驱动接口固定,软件也相对好写,因...

嵌入式linux为什么可以通过PC上的串口去执行命令?

1、uboot(负责初始化基本硬bai件,如串口,网卡,usb口等,然du后引导系统zhi运行)2、linux系统(真正的操作系统)3、你的应用程序(基于操作系统的软件应用)当你开发板上电时,u...

取消回复欢迎 发表评论: