版权声明
----------------------------------------------------------------
作者: 女儿叫老白
转载请注明出处!
网页版课程源码 提取码: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配置项的值。
3 变量与环境变量 --- 在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文件常用配置
下一节:KS02-06 一劳永逸:引入pri体系