KS02-05 pri 文件有啥用?

版权声明

----------------------------------------------------------------

作者: 女儿叫老白

转载请注明出处!

网页版课程源码 提取码:1uy7



引言

----------------------------------------------------------------

在前面的章节中我们介绍了pro文件的常用配置。当我们进行项目研发时,在各个子项目的pro中经常会出现重复配置,为了处理这种问题,Qt提供了另外一个项目配置文件:pri文件。在pri文件里,我们可以编写公共的变量给各个子项目用,还可以配置各种编译选项、配置各种路径。在本节中,我们将讨论一下pri文件都有哪些作用。

 

正文

----------------------------------------------------------------

在本节中,我们将以常用关键字为线索,介绍pri文件所能起到的各种功能。我们准备为大家介绍如下关键字:

表02-05-01

关键字

含义

include

在pro中引入其他的pri文件

环境变量

在pri中使用环境变量

变量

在pri中定义与使用变量

函数

pri中提供的常用函数

unix/win32

配置不同平台下的编译配置项

DEFINES

在pri中定义宏

CONFIG

项目的配置参数

QMAKE_CXXFLAGS

配置编译警告

现在,我们来分别进行介绍:

1,  include --- 在pro中引入其他的pri文件

    pri文件编写完成之后,可以在项目文件(pro文件)或者其他pri文件中引用。

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

比如:

1.    

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

 

注:

1.     请注意include后面有空格。

2.     pri文件路径中的目录分隔符要用"/",请不要使用"\"。

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

 

2,  环境变量 --- 在pri中使用环境变量

    有时候,在项目编译时我们会用到一些环境变量。比如,将项目编译为32位还是64位,编译成debug版还是release版等等。那么,在pri文件中我们怎样使用这些环境变量呢?

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

    比如:

1.      

2.      

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

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

    在上述例子中,我们用到了TRAINDEVHOME这个环境变量值,分别用来描述gui_base.pri的文件路径以及ks02_04项目的OBJECT_DIR配置项的值。

 

变量与环境变量 --- 在pri中定义与使用变量、环境变量

    除了环境变量之外,有时候为了方便还可以自己定义一些变量。

    比如,Qt的isEmpty()函数不识别环境变量,因此我们可以这样做:

1.      

2.      

3.      

4.      

DEVHOME   = $$(TRAINDEVHOME)

isEmpty(DEVHOME)   {

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

}

    在上述代码中,因为isEmpty()函数不识别环境变量但是可以识别我们定义的变量,所以我们定义了DEVHOME变量,这样isEmpty()就可以根据TRAINDEVHOME这个环境变量的取值进行判断,如果未定义TRAINDEVHOME环境变量,那么就会报错。

    使用语法同系统环境变量不同,变量名不用括号。

语法:$$变量名

1.      

2.      

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

OBJECTS_DIR   = $$TEMPDIR

请注意:

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

错误的写法:

1.      

2.      

CHAPTER   = chapter02

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

正确的写法:

1.    

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

 

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

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

变量:     $$变量名

 

4, 函数  --- pri中提供的常用函数

    在上面的示例中,我们介绍了isEmpty()函数、error()函数,实际上Qt还提供了一些其他函数:

    1)  isEmtpy() 

用来判断一个变量是否为空值,比如:

1.      

2.      

3.      

4.      

DEVHOME   = $$(TRAINDEVHOME)

isEmpty(DEVHOME) {

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

}

 

2)  equals(a, b)

    判断某个变量的 值是否与指定值相等,比如:

1.      

2.      

3.      

4.      

5.      

BUILDTYPE   = $$(TRAINBUILDTYPE)

equals(BUILDTYPE, debug){

    CONFIG += debug

    CONFIG -= release

}

   

    3)  error()

    用来输出错误信息,并终止当前命令,比如:

1.      

2.      

3.      

isEmpty(DEVHOME)   {

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

}

   

    4)  contains(x, y)

    用来判断一个变量x是否包含字符串y,比如下面的配置表示如果TRAIN_QMAKESPEC变量包含” hpux.* ”,则执行括号中的配置:

1.      

2.      

3.      

4.      

5.      

contains(TRAIN_QMAKESPEC, hpux.*   ) {

    # HPUX下全面支持C++

    QMAKE_CXXFLAGS *= -Aa

    LIBS += -lrt

}

 

5, unix/win32  --- 配置不同平台下的编译配置项

1.      

2.      

3.      

4.      

5.      

6.      

7.      

8.      

9.      

unix{

    contains( TRAIN_QMAKESPEC, g++ ) {

        CONFIG *= precompile_header

    }

}

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

win32{

    CONFIG *= precompile_header

}

 

注:

1.     linux也使用unix配置。

2.     所有的左括号“{”,跟起始配置在同一行,不要换行。

 

6, DEFINES --- 在pri中定义宏

    可以根据需要定义宏定义,这些宏定义可以在源代码中使用,比如

1.      

2.      

3.      

4.      

5.      

6.      

7.      

8.      

9.      

10.   

11.   

12.   

13.   

#UNIX下编译设置

unix{

    #表示unix或linux操作系统

    DEFINES *= unix  __unix

}

#WIN32下编译设置

win32{

    #表示WINDOWS操作系统

    DEFINES *= WIN32

}

equals(BUILDBIT,64){

    DEFINES *= TRAIN_64

}

    在上述代码中,在pri中定义的宏定义" unix"、" __unix "、"WIN32"、"TRAIN_64"都可以在代码中使用,比如:

1.      

2.      

3.      

4.      

5.      

6.      

7.      

#ifdef    __unix

    ……

#endif

 

#ifdef  TRAIN_64

    ……

#endif

 

注:

1.   DEFINES 后面是 *=,(就是 星号=),用来表示累加。

 

7, CONFIG --- 项目的配置参数

    CONFIG配置项在pri中与pro中用法一样。

    常用的参数:

    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  --- 配置编译警告

    用来为编译器指明一些处理标志,比如:

1.      

2.      

3.      

4.      

# 去掉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中定义的宏可以在代码中使用

    好了,总结就到这里,祝大家编程愉快。

----------------------------------------------------------------

《Qt入门与提高-GUI产品开发》目录请添加链接描述
上一节:KS02-04 pro文件常用配置
下一节:


猜你喜欢

转载自blog.51cto.com/14038054/2434595