找回密码
 立即注册
收起左侧

【独家连载】Qt入门与提高:K02-07还不知道pri咋用?来练手吧

0
回复
7562
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-10-7 17:46:33 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 baizy77 于 2018-11-3 12:46 编辑
版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org
作者: 女儿叫老白
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------

引言
----------------------------------------------------------------------------------------------------------------------
       前一章节中我们介绍了如何在项目中引入pri体系,内容虽然比较多,但是真正需要修改或者注意的点并不多:只有几个环境变量。因为pri文件本身内容较多,所以读者可能看着有点发懵或者不知道到底该咋用,本节我们就跟大家一起来练练手,实践一下把pri文件引入项目。

正文
----------------------------------------------------------------------------------------------------------------------
直接给出预演步骤:
1)  创建pri文件并建立环境变量。
如果对环境变量名称或者我们提供的路径变量名称不满意,您可以自行替换。
2)  建立自己的项目,并在pro中添加对pri文件的引用。
3)  在项目源代码中使用pri中定义的宏。
下面我们分步介绍。
第一步,创建pri文件并建立环境变量。
开始之前,请大家先把上一章节的pri文件内容保存为独立的pri文件(本节也提供下载),暂且取名为gui_base.pri。我们在前面章节中介绍了项目根目录所包含的子目录结构,现在我们简单回顾一下,为了体现出练手的效果,请把环境变量改为PRJROOT:
代码清单:
  1. $PRJROOT
  2. ------bin                编译好的运行程序所在目录
  3. ------lib                 编译好的lib文件所在目录
  4. ------include          公共头文件目录,其下可以再分子目录
  5. ------src                源代码根目录
  6. ------temp             临时文件目录
复制代码

好了,根据pri文件的要求,请在您的系统中建立下面这3个环境变量:
  1. PRJROOT             指向项目的根目录
  2. PRJBUILDTYPE     all
  3. PRJBUILDBIT       64
复制代码
然后,请将附件pri文件中的环境变量字符串替换,对应关系如下:
  1. TRAINDEVHOME       --->  PRJROOT
  2. TRAINBUILDTYPE     --->  PRJBUILDTYPE
  3. TRAINBUILDBIT        --->  PRJBUILDBIT
复制代码
将修改后的pri文件保存到$PRJROOT/src目录下:

  1. $PRJROOT/src/gui_base.pri
复制代码

这样,我们就完成了第一步。
如果您对我们提供的pri文件里面的各种路径的命名不满意,请自行更改,路径列表如下:

代码清单:
  1. TRAIN_BIN_PATH = $(PRJROOT)/bin
  2. TRAIN_LIB_PATH = $(PRJROOT)/lib
  3. TRAIN_OBJ_PATH = $(PRJROOT)/obj
  4. TRAIN_SRC_PATH = $(PRJROOT)/src
  5. TRAIN_UIC_PATH = $(PRJROOT)/obj/uic
  6. TRAIN_INCLUDE_PATH = $(PRJROOT)/include
复制代码

       请注意,等号左侧的自定义变量名称是我们用来在项目的pro中引用的变量,您可以将其更换为合适的名称,但是更换后,请将您修改的pri文件中对这些变量的引用同步替换,否则会引起不必要的错误。

第二步,建立自己的项目,并在项目的pro文件中开头添加如下的引用:
include ($$(PRJROOT)/src/gui_base.pri)
并且在pro文件中引用gui_base.pri中定义的变量,请注意粗体、斜体的代码:

代码清单:
  1.   #ks02_07.pro
  2. include  ($(PRJROOT)/src/gui_base.pri)
  3.   TEMPLATE     = app
  4.   LANGUAGE    = C++
  5.   CONFIG +=  console
  6.   
  7. DESTDIR     = $TRAIN_BIN_PATH
  8. HEADERS         +=   $TRAIN_SRC_PATH/gui_base.pri \
  9.                               ks02_07.pro
  10.   SOURCES    +=   main.cpp
  11. TEMPDIR             =  $TRAIN_OBJ_PATH/chapter02/ks02_07
  12.   OBJECTS_DIR      = $TEMPDIR
  13.   MOC_DIR             = $TEMPDIR/moc
  14.   UI_DIR                 = $TEMPDIR/ui
  15.   
  16.   debug_and_release  {
  17.          CONFIG(debug, debug|release) {            
  18.                 TARGET = ks02_07_d
  19.          }
  20.          CONFIG(release, debug|release) {            
  21.                 TARGET  = ks02_07
  22.          }
  23.   } else {
  24.          debug {  
  25.                 TARGET  = ks02_07_d
  26.          }
  27.          release {      
  28.                 TARGET        = ks02_07
  29.          }
  30.   }
复制代码
我们来看一下这个pro文件,第一行代码引入了pri文件:
    include ($$(PRJROOT)/src/gui_base.pri)
然后,下面的代码引用了pri文件中的变量,用来设置目标程序所在路径:
    DESTDIR     =$$TRAIN_BIN_PATH
我们在HEADRS参数中加入了pri文件和pro文件,完全是为了方便,因为这样就可以在VisualStudio的IDE环境中,直接查看这两个文件的内容了:
    HEADERS      +=  $$TRAIN_SRC_PATH/gui_base.pri \
                                                 ks02_07.pro
紧接着,我们定义了自定义变量TEMPDIR
代码清单:
----------------------------------------------------------------------------------------------------------------------
TEMPDIR           = $$TRAIN_OBJ_PATH/chapter02/ks02_07
OBJECTS_DIR   = $$TEMPDIR
MOC_DIR           = $$TEMPDIR/moc
UI_DIR               =$$TEMPDIR/ui
----------------------------------------------------------------------------------------------------------------------
TEMPDIR这个变量引用了pri中的TRAIN_OBJ_PATH变量。
然后,我们将OBJECTS_DIR(Qt关键字,用来指明临时文件目录)设置为TEMPDIR,并且也设置了MOC_DIRUI_DIR。其实在本节的示例代码中并没有提供界面文件(ui文件),但是我们还是给出了MOC_DIRUI_DIR的设置,这纯粹是为了解释TEMPDIR的使用。
在pro的最后,我们给出了目标程序的命名方法:

代码清单:
  1. debug_and_release  {  
  2.        CONFIG(debug, debug|release) {
  3.               TARGET = ks02_07_d
  4.        }
  5.        CONFIG(release, debug|release) {   
  6.               TARGET  = ks02_07  
  7.        }  
  8. } else {  
  9.        debug {
  10.               TARGET  = ks02_07_d  
  11.        }  
  12.        release {
  13.               TARGET        = ks02_07  
  14.        }  
  15. }
复制代码
在这里,我们把debug版本和release版本设置为不同的名称(debug版本带有_d的字样,release版本则没有),这样我们在运行它们时就可以方便的区分开来。

第三步,我们在源代码中使用pri中定义的宏定义
       比如,我们可以使用pri中定义的TRAIN_DEBUG,在源代码中可以这样写:

代码清单:
  1. #ifdef TRAIN_DEBUG
  2.        cout << "我真的啥也没干." << endl;
  3. #else
  4.        cout << "我到底干了点啥呢." << endl;
  5. #endif
复制代码

结语
----------------------------------------------------------------------------------------------------------------------
本节讲了如何在项目中实践pri文件的使用,附件中给出的代码仍然使用TRAINDEVHOME、TRAINBUILDTYPE、TRAINBUILDBIT这3个未改名的环境变量,读者可以自行将其改名。OK,我都等不及了,开始练习吧!

上一节:  KS02-06   一劳永逸:引入pri体系

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了