baizy77的个人主页

http://www.qtcn.org/bbs/u/88608  [收藏] [复制]

baizy77

小白

  • 2

    关注

  • 8

    粉丝

  • 1

    访客

  • 等级:新手上路
  • 总积分:0
  • 男,1977-11-27

最后登录:2021-01-06

更多资料

日志

2.4 知识点 pro文件常用配置

2020-12-24 14:44


前面的章节通过几个案例介绍了pro文件的基本配置,本节来看一下pro文件的一些常用配置。
1.EXE还是DLL---TEMPLATE
用C++语言开发的程序一般有两种存在形式:EXE程序、DLL程序。那么这在Qt中由什么决定呢?现在介绍一下TEMPLATE配置项,该配置项用来确定生成的程序是EXE还是DLL(见表2-1)。
表2-1 TEMPLATE配置项取值说明

配置项内容

说明

TEMPLATE = app

表示本项目生成一个EXE

TEMPLATE = lib

表示本项目生成一个DLL

TEMPLATE = subdirs

表示本项目将扫描指定的子目录集合并执行相关操作。该配置经常与SUBDIRS配合使用。比如指定需要国际化的子目录列表时,可使用该配置

2.用什么开发语言呢---LANGUAGE
语法:LANGUAGE =C++
LANGUAGE表示本项目用哪种编程语言进行开发。“LANGUAGE =C++”表示采用C++语言开发。
注意: C要大写。
3.生成的目标文件名是啥---TARGET
语法:TARGET = xxx
TARGET表示本项目生成的目标文件名。比如,根据TEMPLATE配置项的取值不同(app、lib),当TARGET= prog时,生成的目标文件名见表2-2。
表2-2 不同平台上的目标文件名

配置项内容

Windows

Linux

TEMPLATE = app

prog.exe

prog

TEMPLATE = lib

prog.dll

libprog.so.1.0.0

4.debug还是release---CONFIG
语法:CONFIG  +=  xxx  xxx  xxx
当使用CONFIG+=的写法时表示增加某些CONFIG配置项,等号右侧的各个项之间用空格隔开。
语法:CONFIG  -=  xxx  xxx  xxx
当使用CONFIG-=的写法时表示删除某些CONFIG配置项。
CONFIG的常用取值如下。
1)release
release表示以发布版本进行构建。如果配置中也指定debug,最后一个配置的内容生效。可以用+/-进行控制,如CONFIG -= release,CONFIG+=debug。
2)debug
debug表示项目以调试版本进行构建。可以用+/-进行控制。
3)debug_and_release
debug_and_release表示项目以debug和release两种模式构建。即构建时同时生成Debug、Release版本的目标程序。
4)precompile_header
precompile_header表示可以在项目中使用预编译头文件。
5)rtti
rtti表示启用RTTI支持。默认使用编译器默认值(具体跟编译器有关)。关闭时用rtti_off。
6)stl
stl表示启用STL支持。默认使用编译器默认值(具体跟编译器有关)。关闭时用stl_off。
7)thread
thread表示启用多线程支持。当CONFIG的取值包含qt时才启用。thread是默认设置。
8)warn_on
warn_on表示编译器应该尽可能多输出警告。如果也指定了warn_off,则最后一个生效。
9)warn_off
warn_off表示编译器应该尽可能少输出警告。
10)qt
qt表示需要链接Qt的类库。当需要使用Qt类库时配置该项。在开发服务类应用时,一般只是用Qt的pro文件来组织项目并完成构建,然后使用其他类库或者自行编写类库,所以编写服务类应用时一般不用qt(写成:CONFIG -= qt)。
11)c++11
c++11表示启用C++11支持。如果编译器不支持C++11,则该配置项被忽略。默认不支持C++11。
12)c++14
c++14表示启用C++14支持。如果编译器不支持C++14,则该配置项被忽略。默认不支持C++14。
5.使用Qt的哪些模块---QT
语法:QT +=  xxx  xxx  xxx
当使用QT+=的写法时表示增加某些QT模块,等号右侧的各个项之间用空格隔开。
语法:QT -=  xxx  xxx  xxx
当使用QT-=的写法时表示删除某些QT模块。
配置项QT用来描述项目中使用Qt的哪些模块。默认情况下包含core和gui这两个模块,目的是确保标准的GUI应用程序可以无须进一步的配置就可以正常构建。如果想建立一个不包含Qt GUI模块的项目,可以使用“-=”操作符:

QT  -=  gui  # 仅仅使用core模块

如果要创建一个界面类应用,而且要用到XML及网络相关的类,那么可以写成:

QT += widgets xml network

如果需要用到UI文件,请务必配置QT+= widgets,否则构建项目时将无法通过uic处理UI文件(无法生成UI文件对应的ui_xxx.h文件),从而导致构建失败。
6.各种DIR和各种PATH
1)INCLUDEPATH
INCLUDEPATH用来描述构建项目时应该被搜索的include目录,比如:

INCLUDEPATH = $$(TRAINDEVHOME)/include

        如果项目中包含界面资源 (ui) 文件,那么请先配置UI_DIR,再将$$UI_DIR添加到INCLUDEPATH中。这样,在构建项目时就不会出现编译器找不到界面资源文件对应的ui_xxx.h的编译错误。

UI_DIR = $(TRAINDEVHOME)/obj/demo/dialog/ui
INCLUDEPATH += $$(TRAINDEVHOME)/include \
                  $$UI_DIR

2)DESTDIR
DESTDIR用来描述目标文件的存放路径,也就是项目生成的EXE或DLL的存放目录。 比如下述语句用相对路径的方式描述了一个DLL项目的目标文件的存放路径:

DESTDIR = ../../lib

3)MOC_DIR
MOC_DIR用来描述Qt的moc命令生成的中间文件的存放路径。比如,含Q_OBJECT宏的头文件转换成标准的C++头文件时的存放目录。

MOC_DIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04/moc

4)OBJECTS_DIR
OBJECTS_DIR用来描述所有中间文件(obj文件)的存放路径,比如:

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

5)RCC_DIR
RCC_DIR用来描述Qt资源编译器输出文件的存放路径,即:qrc文件转换成qrc_xxx.h文件时的存放路径。比如:

RCC_DIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04/resources

6)UI_DIR
UI_DIR 用来描述Qt的uic命令编译UI文件后得到的所有中间文件(ui_xxx.h)的存放路径。比如:

UI_DIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04/ui

7.FORMS
FORMS用来描述项目用到的UI文件列表。这些UI文件在编译时将先被Qt的uic命令处理。编译这些UI文件时所需要的所有依赖的头文件(比如Qt的头文件)和源文件都会自动被添加到项目中。FORMS示例如下。

FORMS = dialog.ui \
         login.ui

8.HEADERS
HEADERS用来描述项目用到的头文件列表,如代码清单2-12所示。
代码清单2-12

HEADERS = abc.pro \
          animate/files/myfile.h \
          ../../comdll/mycom.h \
          $$(TRAINDEVHOME)/include/base.h

现在对代码清单2-12进行说明。
(1)将pro文件添加到HEADERS完全是为了方便,因为这样就可以在VS 2017的【解决方案资源管理器】中直接查看abc.pro文件,而无须到资源管理器中查找。如果用Qt Creator开发则无须这样写。
(2)编写路径时请使用“/”而不是“\”。比如:
    animate/files/myfile.h
(3)可以用相对路径的语法,比如:
    ../../comdll/mycom.h
(4)可以使用环境变量,比如:
    $$(TRAINDEVHOME)/include/base.h
(5)有跨行内容时在行末使用“\”进行换行,并在“\”前加一个空格。
9.SOURCES
SOURCES用来描述项目用到的cpp文件列表。语法、注意点同HEADERS。
10.RESOURCES
RESOURCES用来描述项目用到的资源描述文件 (qrc) ,比如:

RESOURCES += mdi.qrc

11.LIBS
LIBS用来描述项目引用的库文件列表。LIBS有-l(小写的L)和-L两种语法。
1)-l(小写的L)
-l表示库文件名。下面的语句表示链接库文件mycomm。

LIBS  += -lmycomm

2)-L
-L表示库文件所在的路径。如果项目引用的两个库文件为mycomm、fesp,它们所在的目录为:/usr/local/myprogram/lib,那么可以写成:

LIBS  += -L/usr/local/myprogram/lib \
                        -lmcomm \
                        -lfesp

12.TRANSLATIONS
TRANSLATIONS用来描述项目用到的翻译文件。比如:

# xxxfortranslations.pro
TRANSLATIONS = translations/graphplatform_zh_CN.ts

当执行lupdate命令时,该命令将读取pro文件中的TRANSLATIONS配置项。执行lupdate命令后,生成的ts文件就名就是TRANSLATIONS配置项的值所指向的文件名。

lupdate  xxxfortranslations.pro



13.SUBDIRS
SUBDIRS配置一般同template=subdirs配合使用。该配置项指示本项目包含的子目录列表。通过SUBDIRS,Qt可以扫描各个子目录以便生成整个项目的国际化翻译文件(后缀为.ts),也可以级联生成各个子目录中项目的Makefile。如果pro文件中包含代码清单2-13所示内容,那么对该pro执行qmake时,Qt会自动进入SUBDIRS列出的各个子目录,然后依次执行qmake,以便生成各个子目录中项目的Makefile。
代码清单2-13

template=subdirs
SUBDIRS    = \
            esfc   \
            common \
            phcore \
            phwidget

注意:修改pro或pri文件后,务必重新执行qmake或qmake –tp vc,以便更新Makefile或者VS 2017的项目文件(.vcxproj)
《Qt 5/PyQt 5实战指南》目录

分类:Qr入门与提高|回复:0|浏览:323|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:05-02 12:24
©2005-2016 QTCN开发网 版权所有 Gzip disabled