问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pri文件可以删除吗

发布网友 发布时间:2022-04-24 10:56

我来回答

1个回答

热心网友 时间:2023-10-10 15:37

当进行中大型Qt项目研发时,在各个子项目的pro文件中经常会出现重复配置。为了处理这个问题,Qt提供了另外一个项目配置文件:pri文件。在pri文件里,可以编写用于各个子项目的公共变量,还可以配置各种公共的编译选项、配置各种公共路径。本节将以常用关键字(见表2-3)为线索,介绍pri文件的各种用途。

表2-3 pro和pri文件常用关键字

关键字(或关键字类型)

含义

include

在pro中引入某pri文件

环境变量

在pri中使用环境变量

变量

在pri中定义与使用变量

函数

pri中提供的常用函数

unix/win32

用来定义在不同平台下构建项目时的配置项分支

DEFINES

在pri中定义宏

CONFIG

项目的配置参数

QMAKE_CXXFLAGS

配置编译标志

下面分别进行介绍。

1.include

include用来在pro或pri中引入某pri文件。

语法:include (pri文件全路径名)

比如:

include ($(TRAINDEVHOME)/src/gui_base.pri)

注意:

(1)include后面有空格。用括号把pri文件名括起来。

(2)pri文件路径中的目录分隔符用“/”,请不要使用“\”。

(3)pri文件只能被另一个pri文件或pro文件引用,不能在.h或.cpp文件中用#include语句引用pri文件。

2.环境变量

有时在构建项目时会碰到如下问题:将项目编译为32位还是64位,编译成Debug版还是Release版等。这可以通过定义环境变量来解决。那么,在pri文件中怎样使用这些环境变量呢?使用环境变量的语法如下:

$$(环境变量名称)

下面看一下对环境变量TRAINDEVHOME的使用。该环境变量分别用来描述gui_base.pri的文件路径以及ks02_04项目的OBJECT_DIR配置项的值。

代码清单2-14

include ($$(TRAINDEVHOME)/src/gui_base.pri)

OBJECTS_DIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04

3.变量与环境变量

除了环境变量之外,有时候为了方便还可以自定义一些变量。比如,Qt的isEmpty()函数不识别环境变量,因此可以通过变量来解决这个问题(见代码清单2-14)。

代码清单2-14

DEVHOME = $$(TRAINDEVHOME)

isEmpty(DEVHOME) {

error('TRAINDEVHOME'环境变量必须被定义.)

}

isEmpty()函数不识别环境变量,但它可以识别自定义的变量,所以在代码清单2-14中定义了DEVHOME变量。这样isEmpty()就可以通过DEVHOME变量间接对TRAINDEVHOME这个环境变量的取值进行判断。如果未定义TRAINDEVHOME环境变量,编译器就会报错。

变量的使用语法同环境变量不同,使用变量时不加括号。 变量的使用语法:$$变量名。比如:

TEMPDIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04

OBJECTS_DIR = $$TEMPDIR

对环境变量和变量的使用做一下说明:

(1)在一行语句中,所引用的变量或环境变量的总个数不能超过1个。

错误的写法:

CHAPTER = chapter02

TEMPDIR =

(TRAINDEVHOME)/obj/
CHAPTER/ks02_04

正确的写法:

TEMPDIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04

(2)使用环境变量的语法跟使用变量的语法不同(环境变量名要用括号)。

环境变量语法: $$(环境变量名)

变量语法: $$变量名

4.函数

在代码清单2-14中,介绍了isEmpty()函数、error()函数,实际上Qt还提供了一些其他函数。

1)isEmtpy()

isEmtpy()函数用来判断一个变量是否为空值,比如:

DEVHOME = $$(TRAINDEVHOME)

isEmpty(DEVHOME) {

error('TRAINDEVHOME'环境变量必须被定义.)

}

2)equals(a, b)

equals(a, b)函数用来判断某个变量的值是否与指定值相等。代码清单2-15表示如果BUILDTYPE的值是debug则执行标号①处的代码。

代码清单2-15

BUILDTYPE = $$(TRAINBUILDTYPE)

equals(BUILDTYPE, debug){

CONFIG += debug ①

CONFIG -= release

}

3)error()

error()函数用来输出错误信息,并终止当前构建过程,比如:

isEmpty(DEVHOME) {

error('TRAINDEVHOME'环境变量必须被定义.)

}

4)contains(x, y)

contains(x, y)函数用来判断一个变量x是否包含字符串y。代码清单2-16表示如果TRAIN_QMAKESPEC的值包含“hpux.”,则执行花括号中的配置。

代码清单2-16

contains(TRAIN_QMAKESPEC, hpux.* ) {

# HPUX下全面支持C++

QMAKE_CXXFLAGS *= -Aa

LIBS += -lrt

}

5)unix/win32

unix和win32用来配置不同平台下的配置项。如代码清单2-17中Linux、UNIX平台均使用unix配置项,而Windows平台使用win32配置项。建议所有的{都跟配置项关键字在同一行。比如,标号①处unix后面的{要跟unix写在同一行。

代码清单2-17

unix{ ①

contains( TRAIN_QMAKESPEC, g++ ) {

CONFIG *= precompile_header

}

}

#WIN32下声明使用预编译头文件

win32{

CONFIG *= precompile_header

}

6)DEFINES

DEFINES用来在pro、pri文件中定义宏。这些宏可以在源代码中使用,比如代码清单2-18中标号①处、标号②处、标号③处定义的unix、__unix、WIN32、TRAIN_64。

代码清单2-18

#UNIX下编译设置

unix{

#表示Unix或Linux操作系统

DEFINES *= unix __unix ①

}

#WIN32下编译设置

win32{

#表示WINDOWS操作系统

DEFINES *= WIN32 ②

}

equals(BUILDBIT,64){

DEFINES *= TRAIN_64 ③

}

注意:标号①处、标号②处、标号③处的DEFINES后面的*=表示累加。

代码清单2-18中定义的unix、__unix、WIN32、TRAIN_64,可以在源代码中使用。比如:

// dialog.cpp

#ifdef __unix

...

#endif

#ifdef TRAIN_64

...

#endif

7)CONFIG

CONFIG配置项在pri中与pro中用法一样。CONFIG常用的选项有:

CONFIG += console qt debug release thread warn_on

下面分别进行介绍。

(1)console表示本项目是命令行程序,在启动本项目的目标程序时会启动一个终端(命令行)。

(2)qt表示本项目要加载Qt的库,链接时要链接Qt的类库。

(3)debug和release分别表示将项目构建成Debug版本还是Release版本。

(4)thread表示程序是否启用多线程。如果没有thread选项,项目将无法使用多线程。

(5)warn_on表示是否显示编译警告。因为有些编译警告还是很重要的,所以建议开启该配置项。如果不关注或者不处理编译警告,也有可能导致程序运行时异常。

8)QMAKE_CXXFLAGS

QMAKE_CXXFLAGS用来为编译器指示一些编译标志,比如:

# 去掉strcpy等编译警告

QMAKE_CXXFLAGS *= -wd499

# ui 生成的文件使用 utf-8 编码,编译时产生4819 警告,因此去掉

QMAKE_CXXFLAGS *= -wd4819

在进行中大型项目开发时经常会用到pri文件。如果仅仅编写一个独立的EXE模块,那么pri文件可能不会发挥太大作用,因为可以把pri中的配置项直接编写到pro文件中。但是建议进行软件研发时要进行标准化操作,比如:建立一套pri文件并在团队的所有项目中使用,那么在建立新项目时将会非常方便。

现在,回顾一下本节的主要内容:

(1)pri文件路径中的目录分隔符要用“/”,请不要使用“\”。

(2)pri文件只能被pro文件或另一个pri文件引用。

(3)使用环境变量的语法跟使用变量的语法不同:

使用环境变量的语法: $$(环境变量名)

使用变量的语法: $$变量名

(4)在pro或pri中,Qt提供了一些函数来进行判断或者输出信息,比如 isEmpty()、error()等。

(5)在使用CONFIG的配置项进行判断时,建议所有的{跟配置关键字在同一行,不要换行。

(6)在pri中定义的宏可以在代码中使用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
色彩中蓝色、红色、黄色除了加白色以外还有什么办法提高明度 色彩不敢调亮怎么办? 色彩如何提亮 男朋友惹我生气了 事后一点悔意也没 都在气头上 我不小心打男朋友了 他... 解签:为人处事莫亏心,暗室之中有灵应,一时得意反成失,半点悔改胜似金... 我手机之前一段时间由于欠费停机了 前几天我充了50元进去怎么还是... 撕名牌可以用哪些超能力技能? 为什么5孔插座带开关,安装好之后,灯有电,插座不通电? 怎么把照片内存变小 图片内存变小的方法 百度地图导航如何连接车蓝牙 百度地图导航连接车蓝牙方法 pro格式用什么打开 书版里面几种文件的格式分别代表什么意思(小样,打样,pro),发排时需要注意什么? Win7旗舰版下如何打开后缀为pro的文件 关于qt5 creator导入.pro文件时的问题? pro是什么格式 .pro是什么文件? 如何打开PRO文件 炸串的甜酱怎么调制 谁知道大街上炸串夹馍的酱是怎么做的 烤串刷的番茄酱是怎么做的 请问路边小吃炸串酱怎么调制好吃记方便又简单做法 油炸炸串真好吃,可不知道那刷炸串的那酱是怎么调的呀?有哪几种材料,还有做法 炸串滩上的酱料是怎么调出来的? 上清炸串番茄酱的做法 青岛银行二类卡可以买理财产品吗? 银行二类卡是什么卡 二类卡可不可以在手机上理财? DELLTravel Mouse WM524无线鼠标没反应 DELL inspiron13 这台笔记本的蓝牙鼠标怎么弄? 我想问下,是不是Dell笔记本无法默认支持微软的那款无线蓝牙鼠标?是需要安装其他驱动吗? 后缀为pro的文件和后缀为mps的文件如何应用 Qt编译时说未能找到PRO文件,怎么解决 为什么我的电脑只要打开有pro文件的文件夹,就会出现 windows资源管理器已停止工作的对话框,求高手解决。 qt一直构建Pro文件,这是为什么呢?我的Pro文件和编译信息输出如图片所示,好几天了,那位大侠指 倍福PLC软件twincat。打不开Pro文件 怎么让.pro文件中的QMAKE qt创建工程只有pro文件怎么办 怎么用qmake生成.pro文件 详细的问PROE的配置文件设置的步骤,请高手们细详呀题说明。 微信怎么样才能让对方永远搜不到我的? 对方关闭了搜索添加好友之后能不能看见 为啥我的别人搜不到!!!显示不存在???怎么回事 搜不到怎么办? 为什么有些搜索不到怎么办? 知道,为什么搜不出来? 明明是他的,为什么搜索显示不存在呢? 对方微信关闭通过添加好友,怎么转换代码添加 对方微信关闭通过添加好友,怎么转换代码添加 我删了一个微信好友,同时关闭了通过搜索,是不是就加不上我了? 微信搜不到是被注销了吗?