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项目构建)的更多相关文章

  1. 基于Cmake+QT+VS的C++项目构建开发编译简明教程

    目录 一.工具下载与安装 1.     Qt 2.     Visual Studio 2015 3.     Cmake 二.C++及Qt项目构建 1.     基于VS构建Qt项目 2.     ...

  2. 用CMake 构建Qt 项目

    译:用CMake构建Qt项目作者: Johan Thelin  译者:赖敬文原链接:http://developer.qt.nokia.com/quarterly/view/using_cmake_t ...

  3. 在Qt项目中添加全局宏变量来达到按方案编译的目的

    遇到一个需求,需要根据不同需要编译所需程序,本人采用了在QtCreator中建立不同的构建设置,配合宏的方式来实现: 1.在项目-构建设置中,添加构建配置2.在构建步骤里的qmake中的额外参数一栏填 ...

  4. 使用VisualStudio2015开发QT项目

    一直习惯用VS,做QT项目时,不停的来回切IDE有些不方便.研究了一下QT的编译. 实际QT编译的机制和cmake是相同的,QT的IDE使用pro文件进行项目管理.QMake通过解析pro工程文件,生 ...

  5. 配置CLion管理Qt项目国际化支持

    随着Qt 6的发布,cmake也正式宣告接管qmake的工作了. 在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理. 今天我们就来介绍 ...

  6. Hello World程序演示Qt项目的建立、编译、运行和发布

    一.Qt项目的建立 1.选择项目模板. 选择"文件-->新建文件或工程",在选择模板页面选择Qt C++项目中的"Qt Gui应用"一项,然后单击&quo ...

  7. 创建Qt项目

    创建Qt项目 1     创建Qt项目 2.1 使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对 ...

  8. qt利用QT designer构建第一个界面helloworld工程

    qt利用QT designer构建第一个界面helloworld工程原创ZJE_ANDY 发布于2017-04-07 20:25:28 阅读数 6613 收藏展开第一步:点击New Project 第 ...

  9. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

随机推荐

  1. windows操作系统和java常识

    一.java5和java8版本更新很大,现在都是java8; 二.数据存储最小单位Byte字节八个比特位: 三.没有图形操作界面的windows系统: 四.java语言跨平台性:JVM充当不同操作系统 ...

  2. Ubuntu怎么开启/关闭防火墙

    在Ubuntu中,使用sudo ufw status命令查看当前防火墙状态. 不活动,是关闭状态. 在Ubuntu中,使用sudo ufw enable命令来开启防火墙. 在Ubuntu中,使用sud ...

  3. php 日期相关的类 DateInterval DateTimeZone DatePeriod

    * DateInterval <?php /** * Created by PhpStorm. * User: Mch * Date: 7/18/18 * Time: 21:30 */ $dat ...

  4. WireShark高级用法

    报文注释 分组注释 尽量使用英文注释 时间显示 显示实际时间 抓包过滤器 按照规则抓取报文 显示过滤器 按照规则显示报文 自动生成过滤条件:做为过滤器应用 着色规则 默认 可自定义着色规则 追踪数据流 ...

  5. nginx rewrite重写规则集合

    本文根据网络搜索整理,不是原创 一.正则表达式匹配,其中: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配 . 匹配除换行符以外的任意字符 \ ...

  6. Windows与MAC使用差异有感(还会不断更新体验)

    Windows与MAC使用差异有感(还会不断更新体验) 关于键盘 这上是MAC与Windows的⌨️按键区别 我们现在都是USB键盘,而PS/2键盘是已经淘汰掉的(插头是圆孔的),看上图会发现Comm ...

  7. 动图图解GC算法 - 让垃圾回收动起来!

    原创:码农参上(微信公众号ID:CODER_SANJYOU),欢迎分享,转载请保留出处. 提到Java中的垃圾回收,我相信很多小伙伴和我一样,第一反应就是面试必问了,你要是没背过点GC算法.收集器什么 ...

  8. 鸿蒙内核源码分析(Shell编辑篇) | 两个任务,三个阶段 | 百篇博客分析OpenHarmony源码 | v71.01

    子曰:"我非生而知之者,好古,敏以求之者也." <论语>:述而篇 百篇博客系列篇.本篇为: v71.xx 鸿蒙内核源码分析(Shell编辑篇) | 两个任务,三个阶段 ...

  9. Erase-Remove 惯用法

    看到<Effective STL>条款 9 的时候想到了我以前复习的"如何正确使用迭代器删除元素",我面试时使用的也是里面的方法,看面试官的反应好像也没有什么问题,还问 ...

  10. react之组建通信

    父组件与子组件通信 父组件将自己的状态传递给子组件,子组件当做属性来接收,当父组件更改自己状态的时候,子组件接收到的属性就会发生改变 父组件利用ref对子组件做标记,通过调用子组件的方法以更改子组件的 ...