• QT配置文件入门


    http://blog.sina.com.cn/s/blog_4d61a7570100z433.html

    QT配置文件入门

    学习QT才两个月,没什么经验,一点点小心得。希望大家多指点。

    // --------------------------------------------------------------------------------
    用了一段时间的Qt了,对其.pro的配置文件比较感兴趣,就像以前花了大把时间弄Ant一样。以下内容主要是对qmake配置文件做一点简要的说明,外加一点体会吧。
    先给出一个我当前项目的配置文件,再一一解释:
    myproject.pro
    TEMPLATE = app
    QT += core gui sql 
    CONFIG += debug MODULE_GUARD_DOG
    DEFINES += MODULE_GUARD_DOG

    TARGET = wms
    DESTDIR = ./bin
    DLLDESTDIR = ./bin 

    DEPENDPATH += .
    INCLUDEPATH += ./tmp ./include ./modules/usbphone
    INCLUDEPATH *= .
    LIBS += -Llib -lGxUsb 

    MOC_DIR = ./tmp
    OBJECTS_DIR = ./tmp
    UI_HEADERS_DIR = ./tmp
    RCC_DIR = ./tmp 

    include(wms.pri)
    include(modules/usbphone/usbphone.pri)
    win32:RC_FILE = wms.rc

    MODULE_GUARD_DOG{
    HEADERS += GuardDog.h
    SOURCES += GuardDog.cpp
    }

    C++的工程往往有两大类,一是应用程序,另一个则是动态(静态)库。TEMPLATE参数差不多就是标识这个工程的类型了。它有app、lib、subdirs三种类型。前两种类型与两类工程相关,subdirs则是用于配置子项目的。当一个工程比较复杂时,可能会将其分为多个项目,项目之间又相关关联,此时可以写一个统领全局编译配置的文档,其模板类型就是subdirs,意思是说,当前的这个文件呢,只负责协调子项目之间的编译,不包含具体的编译事宜。子项目下面也会有.pro文件,并且要负责其项目中的源文件编译。subdirs类型在Qt的源码中用的比较广泛,毕竟是大工程。呵呵。 
    QT参数表示当前项目中使用到了哪些QT的模块。core表示核心模块,这是整个QT框架的基础,所有的QT项目都会默认包含这个模块。 gui是图形用户界面模块,这个也是默认包含的项目中的,毕竟GUI是QT的强项吧。sql是数据库模块。当前的项目中只使用到了这三个模块,另外,QT 还有netword、opengl(3D图形库)、phonon(多媒体库)、svg、xml、webkit(浏览器引擎)等模块。 
    CONFIG参数用于指定当前项目配置及项目被编译时的一些选项——如项目是以debug还是release模式的编译。其常规值有 debug、release、debug_and_release、build_all、ordered、warn_on、warn_off。 CONFIG可以是一个或者多个这样的值,也就是说用户可以设置:
    CONFIG += debug release #注意,不同的值是用空格隔开的
    同时给它赋予debug和release值可不是相像是的那样让项目同时在两种模式下编译哦,debug参数会覆盖release值的,也就是说,在这样的配置下,项目还是只会在debug模式下编译,除非使用了debug_and_release值。另外,build_all与 debug_and_release差不多是一样的,warn_on、warn_off是开启或者关闭编译警告。剩下要说的是ordered,它的意思是按顺序编译。这个值要与TEMPLATE中的subdirs值配合使用,意思按.pro文件中的目录顺序编译。
    说完了CONFIG的常规值,再来说说不常规的值——常规以外的,都是不常规的啦。用户其实可以给CONFIG赋予任意合法字符窜的。如上面配置文件中就有一个MODULE_GUARD_DOG(加密狗模块),当然,这个模块并非QT所有,而是我自己项目中的模块。MODULE_GUARD_DOG 除了出现在CONFIG中以外,还在DEFINEDS和文件最后面出现过。CONFIG中的MODULE_GUARD_DOG与DEFINEDS中的 MODULE_GUARD_DOG其实没有什么关联,若要说有,那也只是它们刚好服务于同一个模块而言。但是CONFIG中的 MODULE_GUARD_DOG却让qmake执行了文件最后面大括号中的内容。
    在qmake配置文件有条件判断语句,类似于
    if(xxx){}
    之类了。不过,不需要if。那么 MODULE_GUARD_DOG{} 语句的意思就是当文件中定义了MODULE_GUARD_DOG的时候,就执行括号中的内容(把头文件和源文件编入到编译范围中)。类似的判断还有很多,qmake提供一些判断函数,如isEmpty()、contains()等,详细的请参数qmake操作手册。
    DEFINES参数:其作用嘛,就是
    #ifndef XXX
    #define XXX
    #endif
    明白了吧,它也就是一个define,我们也经常在命令行中使用的-DXXX一样。
    TARGET参数:项目生成的exe文件,或者.dll、.lib、.a等文件的文件名。默认是项目工程目录的名字。DESTDIR、DLLDESTDIR则是exe,lib,dll这些文件所有的目录了。
    INCLUDEPATH参数:项目所需要头文件的路径
    LIBS参数:项目所使用到的静态文件的路径。其中-L表示静态文件的路径、-l表示静态文件的名字(不包含扩展名)。也可以不用-L -l,直接写完整路径,如LIBS += C:\A.LIB(注意,现在可是需要扩展名的啦)
    MOC_DIR、OBJECTS_DIR、UI_HEADERS_DIR、RCC_DIR指的是编译过程中产生的名种重要临时文件的目录。 MOC_DIR是元对象编译的中间结果,由moc命令产生,OBJECTS_DIR是编译器产生,.obj文件,经过链接之后就生成那个exe啦。 UI_HEADERS_DIR图形文件对应的头文件,由uic产生。RCC_DIR是资料文件被编译后产生的结果。这些文件都是临时,生成的exe文件并不需要使用到它们,因此把它们放在临时目录即可。一般IDE工具会把它们默认放在debug目录中,但有时候也会与自己的源文件混在一起。所以最好还是给它们指定一个目录。
    include表示包含一个pri的配置文件。pri配置文件与pro文件格式几乎相同,就像ant的配置文件有时也会引入其它的配置文件一样。主要是用于把公共的,或者需要独立的配置部分抽出来。因为一个项目里面可能存在多个pro文件,而这几个pro文件又可以同时使用到一些相同的内容。另外,pri文件在一定程序上也可以用于划分包逻辑结构。c++没有像java那样的包层次结构,但用这种方式在一定程度上达到相似的效果。
    RC_FILE参数:指定的是项目资源文件。这个文件会被编译到exe文件中,它里面可以包含图片、文档等。一般用于不想被用户修改的只读数据了。如项目中使用的一些图片、系统初始化用于配置之类。让人疑惑的是,前面为什么有一个win23:呢?与前面提到的MODULE_GUARD_DOG{} 一样,这是一种缩写形式。如果当前的平台是win32的,就执行冒号后面的语句(只能有一条,如果多条的话,就要用括号了)。平台参数与当前的开发环境相关,还有unix、mac、wince等参数

    0

    阅读(58) 评论 (0) 收藏(0) 转载(0)   打印举报
  • 相关阅读:
    洛谷P1182 数列分段`Section II`
    洛谷P3902 递增
    洛谷P1678-烦恼的高考志愿
    POJ 3263-Tallest Cow
    洛谷P2280 [HNOI2003]激光炸弹
    POJ 1958
    Vijos 1197
    VirtualBox 导入.vdi文件时报“uuid is exists”错误
    解压常用
    cut 命令
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878856.html
Copyright © 2020-2023  润新知