本帖最后由 baizy77 于 2018-11-3 12:46 编辑
版权声明--------------------------------------------------------------------------------------------------------------------- 作者: 女儿叫老白 转载请注明出处! ---------------------------------------------------------------------------------------------------------------------
引言 ---------------------------------------------------------------------------------------------------------------------- 前一章节中我们介绍了如何在项目中引入pri体系,内容虽然比较多,但是真正需要修改或者注意的点并不多:只有几个环境变量。因为pri文件本身内容较多,所以读者可能看着有点发懵或者不知道到底该咋用,本节我们就跟大家一起来练练手,实践一下把pri文件引入项目。
正文 ---------------------------------------------------------------------------------------------------------------------- 直接给出预演步骤: 1) 创建pri文件并建立环境变量。 如果对环境变量名称或者我们提供的路径变量名称不满意,您可以自行替换。 2) 建立自己的项目,并在pro中添加对pri文件的引用。 3) 在项目源代码中使用pri中定义的宏。 下面我们分步介绍。 第一步,创建pri文件并建立环境变量。 开始之前,请大家先把上一章节的pri文件内容保存为独立的pri文件(本节也提供下载),暂且取名为gui_base.pri。我们在前面章节中介绍了项目根目录所包含的子目录结构,现在我们简单回顾一下,为了体现出练手的效果,请把环境变量改为PRJROOT: 代码清单: - $PRJROOT
- ------bin 编译好的运行程序所在目录
- ------lib 编译好的lib文件所在目录
- ------include 公共头文件目录,其下可以再分子目录
- ------src 源代码根目录
- ------temp 临时文件目录
复制代码
好了,根据pri文件的要求,请在您的系统中建立下面这3个环境变量: - PRJROOT 指向项目的根目录
- PRJBUILDTYPE all
- PRJBUILDBIT 64
复制代码然后,请将附件pri文件中的环境变量字符串替换,对应关系如下: - TRAINDEVHOME ---> PRJROOT
- TRAINBUILDTYPE ---> PRJBUILDTYPE
- TRAINBUILDBIT ---> PRJBUILDBIT
复制代码将修改后的pri文件保存到$PRJROOT/src目录下:
- $PRJROOT/src/gui_base.pri
复制代码
这样,我们就完成了第一步。 如果您对我们提供的pri文件里面的各种路径的命名不满意,请自行更改,路径列表如下:
代码清单: - TRAIN_BIN_PATH = $(PRJROOT)/bin
- TRAIN_LIB_PATH = $(PRJROOT)/lib
- TRAIN_OBJ_PATH = $(PRJROOT)/obj
- TRAIN_SRC_PATH = $(PRJROOT)/src
- TRAIN_UIC_PATH = $(PRJROOT)/obj/uic
- TRAIN_INCLUDE_PATH = $(PRJROOT)/include
复制代码
请注意,等号左侧的自定义变量名称是我们用来在项目的pro中引用的变量,您可以将其更换为合适的名称,但是更换后,请将您修改的pri文件中对这些变量的引用同步替换,否则会引起不必要的错误。
第二步,建立自己的项目,并在项目的pro文件中开头添加如下的引用: include ($$(PRJROOT)/src/gui_base.pri) 并且在pro文件中引用gui_base.pri中定义的变量,请注意粗体、斜体的代码:
代码清单: - #ks02_07.pro
- include ($(PRJROOT)/src/gui_base.pri)
- TEMPLATE = app
- LANGUAGE = C++
- CONFIG += console
-
- DESTDIR = $TRAIN_BIN_PATH
- HEADERS += $TRAIN_SRC_PATH/gui_base.pri \
- ks02_07.pro
- SOURCES += main.cpp
- TEMPDIR = $TRAIN_OBJ_PATH/chapter02/ks02_07
- OBJECTS_DIR = $TEMPDIR
- MOC_DIR = $TEMPDIR/moc
- UI_DIR = $TEMPDIR/ui
-
- debug_and_release {
- CONFIG(debug, debug|release) {
- TARGET = ks02_07_d
- }
- CONFIG(release, debug|release) {
- TARGET = ks02_07
- }
- } else {
- debug {
- TARGET = ks02_07_d
- }
- release {
- TARGET = ks02_07
- }
- }
复制代码我们来看一下这个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_DIR和UI_DIR。其实在本节的示例代码中并没有提供界面文件(ui文件),但是我们还是给出了MOC_DIR和UI_DIR的设置,这纯粹是为了解释TEMPDIR的使用。 在pro的最后,我们给出了目标程序的命名方法:
代码清单: - debug_and_release {
- CONFIG(debug, debug|release) {
- TARGET = ks02_07_d
- }
- CONFIG(release, debug|release) {
- TARGET = ks02_07
- }
- } else {
- debug {
- TARGET = ks02_07_d
- }
- release {
- TARGET = ks02_07
- }
- }
复制代码在这里,我们把debug版本和release版本设置为不同的名称(debug版本带有_d的字样,release版本则没有),这样我们在运行它们时就可以方便的区分开来。
第三步,我们在源代码中使用pri中定义的宏定义 比如,我们可以使用pri中定义的TRAIN_DEBUG,在源代码中可以这样写:
代码清单: - #ifdef TRAIN_DEBUG
- cout << "我真的啥也没干." << endl;
- #else
- cout << "我到底干了点啥呢." << endl;
- #endif
复制代码
结语 ---------------------------------------------------------------------------------------------------------------------- 本节讲了如何在项目中实践pri文件的使用,附件中给出的代码仍然使用TRAINDEVHOME、TRAINBUILDTYPE、TRAINBUILDBIT这3个未改名的环境变量,读者可以自行将其改名。OK,我都等不及了,开始练习吧!
上一节: KS02-06 一劳永逸:引入pri体系
|