pro文件和pri文件

pro文件和pri文件,第1张

QT中,qmake为编译工具,通过qmke可以生成一个makefile文件,这就和pro文件有关,下面介绍pro文件的写法:

TELEPLATE :模板

app:默认不写时为app,即应用程序的makefile。

lib :建立一个库的makefile。

TARGET:生成应用程序名

CONFIG:配置信息

CONGIF += qt  warn_on release

分别意思是,告诉qmake这个应用程序是使用QT连编的,这就是说qmake再连接和为编译添加所需要的包含路径的时候会考虑到用qt库。warm_on告诉qmake要把编译器设置为输出警告信息的。release告诉应用程序必须被连编成一个发布版本。开发过程中可设置为也可以为debug版本。

INCLUDEPATH:头文件包含路径

CODECFORSRC = gbk :源文件编码方式

#工程中的源文件和头文件

SOURCES += 

HEADERS +=

RESOURCES += qrc/painter.qrc //  工程中包含的资源文件

FORMS += forms/painter.ui  //  工程中包含的ui设计文件

LIBS += -l(库名)

#平台相关

win32 {

SOURCES += hello_win.cpp

}

unix{

LIBS +=-lcur3

}

如果项目工程大文件多:

可以将SOURCES,HEADERS ,FORMS单独拿出来放到单独一个test.pri文件中,然后在pro文件中用 include(test.pr)进行管理。

pro文件中$和$$符号含义和用法:

包含pri文件:

自定义变量

BASEDIR = .. /.. /.. /.. /

include ( $$ { BASEDIR } pri / common.pri )

include ( $$ { BASEDIR } pri / baseapk.pri )

INCLUDEPATH += $$ { BASEDIR } include

INCLUDEPATH += $$ { BASEDIR } include / forecastbusiness

自定义变量:

myVersion = 1.2

TARGET = software $$ { myVersion }

FILE = main.cpp

SOURCES += $$ FILE

重新qmake 后正确生成目标程序为software1.2的工程。

当进行中大型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中定义的宏可以在代码中使用。

ERI全称:Extended Roaming Indicators,ERI是漫游时的一个图标指示,用于标示当前PRL选择网络的状态。

PRI全称:Primary Rate Interface,是一种线路类型的通常叫法,PRI(30B+D)速率为2.048Mb/s,可以类比为T1,T2,T3线路。

扩展资料:

ERI应用于:

当运营商启用新的频点(例如3G)时,原有用户需更新ERI文件,在运营商签约新的漫游服务提供商,用户需出境漫游时,就需更新PRL。

PRI应用于:

第一、运营商提供的语音服务,接入ISDN网后可以直接使用电话机与外部通信。

第二、从路由器到PBX设备语音线路,可以在PBX的设备下面接Fax和电话机,电话机可以通过路由器与内网IP Phone取得联系。

注:通常用于语音业务,一条PRI业务可以带30路语音线路。

参考资料联来源:

百度百科-PRI

百度百科-网络运营商


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11659432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存