QMake(Qt项目构建)
qmake工具能够简化不同平台上的项目构建。可以自动产生Makefiles文件,仅仅需要少量的信息就可以生成Makefile文件。同时qmake也可以构建不是Qt的项目。qmake基于项目文件中的信息产生Makefile。qmake有一些支持Qt开发的额外特性,自动包含构建moc和uic的规则。qmake也可以生成一个VS工程。
qmake工具提供了一个面向工程的系统,来管理应用、库和其它组件的构建流程。这种方法使您能够在单个文件内,控制所使用的源文件,并对流程中的每个步骤简明地描述。qmake扩展为Makafile来执行必要的编译和链接命令。
一、 简单的项目构建
使用qtcreator创建一个简单的工程,查看其pro文件:
1 QT += core gui
2
3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4
5 TARGET = untitled
6 TEMPLATE = app
7
8
9 SOURCES += main.cpp\
10 mainwindow.cpp
11
12 HEADERS += mainwindow.h
13
14 FORMS += mainwindow.ui
二、 主要参数介绍
1、TARGET:目标文件名。
2、TEMPLATE:生成的工程类型。
app缺省类型,应用;lib库类型;subdirs在子文件夹中构建目标。
3、CONFIG项目的配置和编译选项。
release :release模式。
debug:debug模式。
debug_and_release:debug和release模式。
debug_and_release_target:缺省选项。设置了debug_and_release模式,将在各自目录分开编译。
build_all:如果选中了debug_and_release选项,缺省以debug和release两种模式构建。
autogen_precompile_source 自动生成包含预编译头文件a.cpp。
ordered 按顺序编译。
precompile_header 支持预编译头的使用。
warn_on
warn_off
exceptions 缺省。
exceptions_off
rtti 缺省。
rtti_off
stl 缺省。
stl_off
thread 当CONFIG包含qt时,缺省使用。
c++11 编译器不支持c++11时,不影响。
4 、HEADERS 头文件。
5、SOURCES源文件。
6、FORMS ui文件。
7、RESOURCES 资源文件。
8、LIBS 项目需要链接的库 -L指定库路径 -l指定库。
9、INCLUDEPATH 包含文件路径。
10、DESTDIR 目标文件路径。
11、OBJECTS_DIR 中间文件路径。
12、MOC_DIR moc文件路径。
13、UI_DIR ui文件路径。
14、RCC_DIR 资源文件路径。
三、构建一个大型工程实例
大型工程可能由多个动态库项目构成,首先需要构建一个总的pro,然后再构建各个动态库项目。
1、总的pro。如下面所示,模板选择subdirs,SUBDIRS添加各个子pro文件,ordered按照顺序进行编译。
TEMPLATE = subdirs SUBDIRS + = ../a/a.pro \
../b/b.pro \
../c/c.pro CONFIG + =debug_and_release ordered
2、单个动态库项目构建。
可以将构建文件分为.pro和.pri,在pri里面写
头文件、源文件、UI文件以及资源文件等信息,pro文件里面写配置信息,在pro文件中包含pri。如下所示:
1)target.pri文件
HEADERS + = aa.h \
bb.h
SOURCES + = aa.cpp \
bb.cpp
FORMS + = aa.ui
2)target.pro文件
TEMPLATE = lib
TARGET = target
QT += cor gui xml
DEFINES + = _DEBUG
INCLUDPATH + = . \
./../../core
LIBS + = -lcore
UI_DIR += ./GeneratedFiles
RCC_DIR += ./GeneratedFiles
inlude(target.pri)
CONFIG += debug_and_release plugin
CONFIG(debug,debug|release){
DESTDIR = ../../bin/Debug
MOC_DIR += ./GeneratedFiles/Debug
INCLUDEPATH += ./GeneratedFiles/Debug
OBJECT_DIR += Debug
LIBS += -L../../../bin/Debug -L../../../lib, -Wl,rpath-link,../../../bin/Debug
}
CONFIG(release,debug|release){
DESTDIR = ../../bin/Release
MOC_DIR += ./GeneratedFiles/Release
INCLUDEPATH += ./GeneratedFiles/Release
OBJECT_DIR += Release
LIBS += -L../../../bin/Release -L../../../lib -Wl, rpath-link, ../../../bin/Release
}
QMake(Qt项目构建)的更多相关文章
- 基于Cmake+QT+VS的C++项目构建开发编译简明教程
目录 一.工具下载与安装 1. Qt 2. Visual Studio 2015 3. Cmake 二.C++及Qt项目构建 1. 基于VS构建Qt项目 2. ...
- 用CMake 构建Qt 项目
译:用CMake构建Qt项目作者: Johan Thelin 译者:赖敬文原链接:http://developer.qt.nokia.com/quarterly/view/using_cmake_t ...
- 在Qt项目中添加全局宏变量来达到按方案编译的目的
遇到一个需求,需要根据不同需要编译所需程序,本人采用了在QtCreator中建立不同的构建设置,配合宏的方式来实现: 1.在项目-构建设置中,添加构建配置2.在构建步骤里的qmake中的额外参数一栏填 ...
- 使用VisualStudio2015开发QT项目
一直习惯用VS,做QT项目时,不停的来回切IDE有些不方便.研究了一下QT的编译. 实际QT编译的机制和cmake是相同的,QT的IDE使用pro文件进行项目管理.QMake通过解析pro工程文件,生 ...
- 配置CLion管理Qt项目国际化支持
随着Qt 6的发布,cmake也正式宣告接管qmake的工作了. 在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理. 今天我们就来介绍 ...
- Hello World程序演示Qt项目的建立、编译、运行和发布
一.Qt项目的建立 1.选择项目模板. 选择"文件-->新建文件或工程",在选择模板页面选择Qt C++项目中的"Qt Gui应用"一项,然后单击&quo ...
- 创建Qt项目
创建Qt项目 1 创建Qt项目 2.1 使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对 ...
- qt利用QT designer构建第一个界面helloworld工程
qt利用QT designer构建第一个界面helloworld工程原创ZJE_ANDY 发布于2017-04-07 20:25:28 阅读数 6613 收藏展开第一步:点击New Project 第 ...
- 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...
随机推荐
- 判断输入框中输入的日期格式为yyyy-mm-dd和正确的日期
判断输入框中输入的日期格式为yyyy-mm-dd和正确的日期 function IsDate(str) { //如果是正确的日期格式返回true,否则返回false var regExp; reg ...
- javassist 使用笔记
javassist Javassist 是一个开源的分析.编辑和创建Java字节码的类库.其主要的优点,在于简单,而且快速.直接使用 java 编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构 ...
- Vue3 父组件调用子组件的方法
Vue3 父组件调用子组件的方法 // 父组件 <template> <div> 父页面 <son-com ref="sonRef"/> < ...
- [第十二篇]——Docker Dockerfile之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker Dockerfile 什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. 使用 Dockerfile 定制 ...
- Linux上合理设置网卡的MTU值
MTU:是网络的最大传输单元,通信术语:最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位).最大传输单元这个 ...
- 【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while
shell中的$0 $n $# $* $@ $? $$ shell 编程 | shift 命令用法笔记 $0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个 ...
- python中字符串的各种方法
图片来源见水印,一个学python的公众号
- vue-自定义指令(directive )的使用方法
前言 在vue项目中我们经常使用到 v-show ,v-if,v-for等内置的指令,除此之外vue还提供了非常方便的自定义指令,供我们对普通的dom元素进行底层的操作.使我们的日常开发变得更加方便快 ...
- 一文详解JavaScript的继承模式
1 原型链继承 #### ES6中通过原型继承多个引用类型的属性和方法,由于原型和实例的关系,即每个构造函数都有自己的原型对象,同时原型有一个属性指向构造函数,并且实例有一个内部的指针指向原型.如果存 ...
- 全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客文章
全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客 1.背景 我挺喜欢写博客,但每一次将博客转移到公众号或者知乎,总是需要调整格式,不 ...