• Qt项目管理(33个规则)


    2016-06-20 花莫弦 小小杂货铺LY

    一、qmake的介绍

        qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。

        手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的“项目”文件并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具。

        qmake也注意了Qt的特殊需求,可以自动的包含moc和uic的连编规则。

    Qmake 编译信息可以通过qmake.conf进行配置。

    二、pro、pri、prf、prl

        Qt的工程管理文件常用的主要分为pro、pri、prf、prl四种类型的文件,其中pro文件是主文件,另外三种都可以包含在pro文件中,他们的书写规则都遵循qmake的规则。

        1、prl链接文件,这个文件主要和生成与使用静态库密切相关。

        生成静态库时,我们需要使用 config += create_prl 配置,编译生成和库文件同名的 *.prl 文件;

        当工程的TEMPLATE为app时,会自动添加如下指令CONFIG += link_prl,在查找库文件的时候,会尝试找相应的 *.prl 文件进行链接。

        2、prf特征文件,这个文件主要标识编译特性,可以使用两种方式加载

        1)CONFIG += *prf;

        2)load(*prf)。

        3、pri配置文件,通常放置一些通用的配置信息,进行工程管理。

        4、pro工程管理文件,通常放置与具体工程相关的信息,以及进行层叠式模块的管理。

    三、qmake的规则简介

        1、使用 # 进行注释;

        2、模板变量告诉qmake为这个应用程序生成哪种makefile。

        例如 TEMPLATE = app 应用程序
        app -建立一个应用程序的makefile。

        lib - 建立一个库的makefile。
        vcapp - 建立一个应用程序的VisualStudio项目文件。
        vclib - 建立一个库的VisualStudio项目文件。
        subdirs -这是一个特殊的模板,创建层叠式子目录,进行工程管理。

    (eg:TEMPLATE = subdirs

         SUBDIRS += one

         SUBDIRS += two)

        3、指定生成的应用程序放置的目录  DESTDIR += ../bin ;

        4、指定生成的应用程序名 TARGET = pksystem (和pro文件名相同);

        5、配置信息,CONFIG用来告诉qmake关于应用程序的配置信息。

        例如CONFIG+= qt warn_on release,其中+=为追加,=为赋值,warn_on为qmake要把编译器设置为输出警告信息的,release部分告诉qmake应用程序必须被连编为一个发布的应用程序,此处可以使用debug替换。
        6、指定uic命令,将.ui文件转化成ui_*.h文件的存放的目录 UI_DIR += forms ;

        7、指定rcc命令,将.qrc文件转换成qrc_*.h文件的存放目录
        RCC_DIR += ../tmp ;

        8、指定moc命令,将含Q_OBJECT的头文件转换成标准.h文件的存放目录
        MOC_DIR += ../tmp ;

        9、指定目标文件(obj)的存放目录 OBJECTS_DIR += ../tmp ;

        10、程序编译时依赖的相关路径 DEPENDPATH += . forms include qrc sources ;

        11、头文件包含路径 INCLUDEPATH += . ;

        12、源文件编码方式 CODECFORSRC = GBK ;

        13、工程中包含的头文件 HEADERS += *.h ;

        14、工程中包含的源文件SOURCES += *.cpp ;
        15、工程中包含的.ui设计文件 FORMS += *.ui ;
        16、工程中包含的资源文件 RESOURCES += *.qrc ;

        17、LIBS += -L库路径 -l库名 ;

        18、定义编译选项,DEFINES += XX,在.h文件中就可以使用:#ifdefine xx;

        19、条件编译 (主要区分不同平台和release、debug版本)

        win32 {

        SOURCES += *.cpp

        }

        unix {

        SOURCES += *.cpp

        }

        !exists( main.cpp ) {

        error( “No main.cpp file found” )

        }

        win32:debug {

        CONFIG += console

        }

        CONFIG(debug, debug|release) {

    }

    (注:{必须放置在条件的同一行))

        20、message(信息);

        21、Include(*.pro/*.pri);

        22、Translations Qt语言国际化文件

        23、命令行(配置好Qt环境变量)qmake -project 生成pro文件(需要配置qmake.conf手动修改pro文件进行处理),qmake  *.pro生成makefile文件,nmake(区分编译器)编译即可;

        24、qmake -tp vc *.pro(-r)生成vs解决方案;

        25、qmake -spec macx-xcode *.pro 生成xcode工程文件;

        26、warn_off - 编译器会输出尽可能少的警告信息;

        27、QT += xml  加入Qt模块;

        28、INSTALLS + = target sources   指定安装路径;

        29、QMAKE_CXXFLAGS_WARN_ON C++编译器警告;

        30、QMAKE_CFLAGS_WARN_ON C编译器警告;

        31、W34100  unreferenced formal parameter ;

        32、W34189  local variable is initialized but not referenced;

        33、contains(config,thread)根据thread是否在config中进行编译。

    四、qmake编译选项

        1、qmake [options] files

        1)-help 列出qmake帮助信息;

        2)-o file 直接输出到文件file,如果这个选项没有指定, qmake将会尝试使用合适的文件名作为输出,这依赖于当前的运行模式。
        3)-d 列出qmake的调试信息;

        4)-Wall   qmake将会报告所有知道的警告信息。

    五、参考链接

        1、http://www.kuqin.com/qtdocument/qmake-manual-7.html

        2、https://msdn.microsoft.com/en-us/library/ysb0wexw.aspx

    http://mp.weixin.qq.com/s?__biz=MzI4NzIwMDQ3OA==&mid=2247483680&idx=1&sn=33844b0bfdb9cae3be8c2137f9e70d11&scene=23&srcid=0620axBP8kO6hzc03MHxqfNV#rd

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/findumars/p/5602073.html
Copyright © 2020-2023  润新知