Qt项目管理(33个规则)
一、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
Qt项目管理(33个规则)的更多相关文章
- Qt项目管理文件(.pro)及其作用详解
http://c.biancheng.net/view/1819.html 在 Qt Creator 中新建一个 Widget Application 项目 samp2_1,在选择窗口基类的页面选择 ...
- Qt 项目管理文件(.pro) 详解
项目文件目录树 在 Qt Creator 中新建一个 Widget Application 项目 samp2_1,在选择窗口基类的页面选择 QWidget 作为窗体基类,并选中"Genera ...
- Qt *.pro编写一般规则
qmake 之 CONFIG 与 QT 乱谈 看qtcn论坛中经常有人忘记 QT+=network 等语句.随便写写吧,或许对他人有帮助. 写来写去,发现越写越乱,就这样吧,反正主要的内容很简单. d ...
- Qt ------ 我定义的规则 之 对象命名规则
类型 + 特性,比如 button_closeLigth 非公有的变量前面要加上小写m_ (指的修饰符为private时) 静态变量前面加上小写s_ 其它变量以小写字母开头 静态变量全大写 (sta ...
- 在Qt项目中添加全局宏变量来达到按方案编译的目的
遇到一个需求,需要根据不同需要编译所需程序,本人采用了在QtCreator中建立不同的构建设置,配合宏的方式来实现: 1.在项目-构建设置中,添加构建配置2.在构建步骤里的qmake中的额外参数一栏填 ...
- QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先 ...
- 类似Visual Studio一样,使用Qt Creator管理多个项目,创建子项目
1. 简介 QtCreator是一个十分好用的跨平台IDE,由于最近需要在Windows和Mac同时写一个C++的代码,使用VS和XCode不能实现项目的统一管理(可以使用cmake来组织源码,但是每 ...
- 3、QT分析之消息事件机制
原文地址:http://blog.163.com/net_worm/blog/static/127702419201001432028526/ 上回我们分析到QPushButton的初始化,知道了Wi ...
- Qt绘图
Qt绘图的设置 QPainter::Antialiasing // 反锯齿 QPainter::TextAntialiasing // 文字反锯齿 QPainter::SmoothPixmapTran ...
随机推荐
- U3D学习使用笔记(三)
1.对动画进行播放和暂停(从初始位置) (1).老版动画系统Animation 暂停 an["Take 001"].time = 0f; an["Take 001&quo ...
- vijos 1047 送给圣诞夜的礼品 矩阵
题目链接 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办 ...
- Scala类型声明与定义、函数定义、流程控制、异常处理
Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala的基础类型基本与javascript一致. Scala的数据类型全部相同于Java中,具有 ...
- c/c++实现混合编程
在开发中大家经常会使用到c与c++混合编程,这样能够更好的实现功能模块.刚学习了一下c和c++的混合编程,参考了网上的相关知识,在这里留下要点,方便以后进行查阅. 1.extern关键字 extern ...
- ubuntu rc.local 无效 解决方案(转)
为了让mysql开机启动,我将mysql命令添加到/etc/rc.local中,但怎么也运行不了.一开始认为只是/etc/rc.local的权限问题,但通过以下命令修改后,还是不起作用. sudo c ...
- ognl.InappropriateExpressionException: Inappropriate OGNL expression: 1
WARN OgnlValueStack:49 - Error setting expression '1' with value '[Ljava.lang.String;@11c7eb2' ognl. ...
- Dreamweaver中打开CodeSmith文件
电脑环境:Windows2008+Dreamweaver 8英文版本 问题描述:Dreamweaver中默认打开文档时不支持打开CodeSmith模板文件对应的.cst后缀名文件,截图如下: 解决步骤 ...
- Linux系统CentOS6.2版本号下安装JDK7具体过程
前言: java 是一种能够撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE( ...
- HDU 4937 Lucky Number 规律题_(:зゝ∠)_
把全部合法的进制打出来会发现合法的进制都是在 n/3 n/4 n/5的边上 然后暴力边上的进制数.. #include <cstdio> #include <set> type ...
- cocos2d-x -- 渠道SDK【棱镜】接入(2)
上一章<cocos2d-x -- 渠道SDK[棱镜]接入(1)>,已经接入好了SDK.如今要准备加入渠道了,以豌豆荚为例. 详细流程: 1.加入渠道: