Qt高级——QMake快速入门

Qt高级——QMake快速入门

一、QMake简介

qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。
qmake是一个用来简化在不同平台间开发工程的构建过程的工具。qmake会自动生成MakeFile文件,可以用于任何软件项目中,无论是否由Qt编写。
qmake会注意所有的编译器和平台的依赖性,开发者只需关注自己的代码。qmake作为Qt库和Qt所提供的工具的主要连编工具,可以自动的包含moc和uic的连编规则。

二、QMake入门教程

1、创建一个工程

创建一个应用,包含 hello.cpp、hello.h、main.cpp三个文件。
使用文本编辑器创建一个hello.pro文件,增加源文件、头文件到工程文件hello.pro。

HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

同时,也可以使用换行符一次增加多个文件。

SOURCES = hello.cpp           main.cpp

目标名称会自动设置,一般与工程文件相同,当会用后缀区别不同的平台。如,工程文件是hello.pro,Windows平台的目标名称是hello.exe,Unix平台的目标名称是hello。如果要使用不同的目标名称,需要在工程文件hello.pro中设置。如:
TARGET = helloworld
最后就是配置CONFIG变量,对于Qt应用程序来说,给CONFIG赋值qt,QMake会链接相关的库,并确保moc和uic相关的连编规则生成到MakeFile文件中。最终的hello.pro工程文件如下:

CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

在工程所在目录打开命令行终端,使用qmake生成为应用生成MakeFile。
qmake -o Makefile hello.pro
对于Visual Studio开发者,qmake会生成.dsp或.vcproj文件。
qmake -tp vc hello.pro

2、增加工程的调试版

应用程序的 release版本不包含调试符号或其它调试信息。在开发过程中,生成带调试信息的应用程序调试版本是很有用的。通过增加debug到CONFIG变量可以生成应用程序的调试版本。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

3、增加特定平台的源文件

应用程序中特定平台部分的源码需要保持平台独立代码的分离。现在有hellowin.cpp和hellounix.cpp两个新文件。不能直接增加这两个文件到SOURCES变量,因为这会导致这两个文件直接生成到MakeFile文件,需要在qmake所运行的平台的代码块中独立处理。
对于Windows平台,在一个简单的代码块中增加平台独立的文件。

win32 {
SOURCES += hellowin.cpp}

如果qmake运行在Windows平台上,会增加hellowin.cpp文件到源文件列表。如果qmake运行在其它平台上,会忽略。现在创建一个代码块增加和Unix平台相关的文件。

unix {
    SOURCES += hellounix.cpp}

工程文件hello.pro文件如下:

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
    SOURCES += hellounix.cpp}

4、如果文件不存在中止qmake过程

如果某个文件不存在,不生成MakeFile文件。可以使用exists()函数检查一个文件是否存在。通过使用error()函数可以中止qmake执行过程。对main.cpp文件检查如下:

!exists( main.cpp ) {
    error( "No main.cpp file found" )}

如果main.cpp文件存在,exists(main.cpp)为true。
如果main.cpp文件不存在,!exists(main.cpp)为true。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists( main.cpp ) {
    error( "No main.cpp file found" )}

5、检查多个条件

假设在Windows平台上,使用命令行运行应用程序,想通过qDebug()函数查看输出状态。除非在应用程序构建过程中使用console设置,否则看不到输出状态信息。通过将console增加到CONFIG变量可以在生成的MakeFile文件中生成相应的设置。
如果只在Windows平台上debug版本时查看输出信息。代码如下:

win32 {
    debug {
        CONFIG += console
    }}

内嵌的作用域也可以使用冒号(:)连接在一起。

CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
    SOURCES += hellowin.cpp}
unix {
SOURCES += hellounix.cpp}
!exists(main.cpp) {
    error("No main.cpp file found")}
win32:debug {
    CONFIG += console}

三、QMake创建工程

本文将讲述如何设置基于Qt的三种通用工程类型的qmake工程文件。

1、QMake创建应用程序

app模板会告诉qmake生成一个构建应用程序的MakeFile。使用app模板,应用的类型可以增加一个选项到CONFIG变量定义中。
windows:应用是一个Windows GUI应用程序
console:应用是一个Windows控制台应用。
使用app模板时,下列qmake系统变量会被识别,可以在应用程序的.pro文件中使用。
HEADERS:应用程序的头文件列表
SOURCES:应用程序的源文件列表
FORMS:应用程序的UI(Qt Designer创建)文件列表
LEXSOURCES:应用程序的LEX原文件列表
YACCSOURCES:应用程序的YACC源文件列表
TARGET:应用程序的可执行文件名称
DESTDIR:生成的目标文件的存放目录
DEFINES:应用程序指定的预定义预处理器符号
INCLUDEPATH:编译器的搜索头文件路径
DEPENDPATH:应用程序的依赖查找路径
VPATH:寻找补充文件的搜索路径
DEF_FILE: 应用程序链接的.def文件,仅支持Windows。
RC_FILE:应用程序的资源文件,仅支持Windows。
RES_FILE:应用程序链接的资源文件,仅支持Windows。
开发者可以直接使用有值的qmake系统变量,不必指定任何值。qmake会自动增加需要的默认值。
实例工程文件如下:

TEMPLATE = app
DESTDIR  = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG  += qt warn_on release

对于单个值的数据项,如模板或目的目录,使用“=”,但多个值的数据项需要使用“+=”增加到已经存在相应类型的数据项中。如果使用“=”会使用新的值替换原来的值,例如,DEFINES=QT_DLL,所有其它的定义都会被删除。

2、QMake创建库

lib模板告诉qmake生成构建一个库的MakeFile。使用lib模板时,除了app模板支持的系统变量,也支持VERSION变量。可以使用这些变量在.pro文件中指定库的相关信息。当使用lib模板时,以下选项需要增加到CONFIG变量决定要构建的库的类型。
dll:库是一个共享库
staticlib:库是一个静态库
plugin:库是一个插件,也支持dll选项
VERSION变量指定库的版本信息
库的目标文件名是平台独立的。例如,X11和Mac OS X,库名称使用lib 前缀,Windows平台上,库文件名不增加任何前缀。

3、QMake创建插件

插件使用lib模板构建,告诉qmake生成一个工程的MakeFile。
VERSION变量用于指定插件的版本信息。
就像普通库一样,VERSION变量用于指定插件的版本信息。Qt Designer插件会使用一套依赖于Qt配置的特定配置集进行构建。为了方便起见,这些设置可以通过增加designer到工程CONFIG变量开启。例如:
CONFIG += designer plugin

4、QMake创建Debug 和Release

某些时候,构建同时支持debug和release的工程是必要的。虽然CONFIG变量有debug和release选项,但是debug选项会覆盖release选项。
为了开启工程同时支持debug和release,必须在CONFIG变量增加debug_and_release选项。

CONFIG += debug_and_release

CONFIG(debug, debug|release) {
    TARGET = debug_binary} else {
    TARGET = release_binary}

以上代码块会修改每一种模式的构建目标,确保目标有不同的文件名称。为目标提供不同的名称可以确保目标相互间不会被覆盖。
当qmake处理工程文件时,会生成一个允许支持debug和release模式的MakeFile规则。可以通过以下方式调用:
make all
build_all选项增加到工程文件的CONFIG变量,可以确保工程默认会被两种模式编译。
CONFIG += build_all
这会允许Makefile使用默认规则处理。
make
build_all选项也可以确保目标的两个版本在安装规则被调用时被安装。
make install
可以自定义依赖于目标平台的构建目标的名称。例如,一个库或插件可以在Windows平台使用不同于Unix平台的命名规范。

CONFIG(debug, debug|release) {
    mac: TARGET = $$join(TARGET,,,_debug)
    win32: TARGET = $$join(TARGET,,d)}

在debug模式构建时,以上代码块的默认行为会修改构建目标使用的名称。

原文地址:http://blog.51cto.com/9291927/2112865

时间: 2024-07-29 21:58:48

Qt高级——QMake快速入门的相关文章

Qt高级——D-Bus快速入门

Qt高级--D-Bus快速入门 一.D-Bus简介 1.D-Bus简介 D-Bus是Desktop Bus的缩写,是针对桌面环境优化的IPC(InterProcess Communication)机制,用于进程间的通信或进程与内核的通信.D-Bus是为Linux系统开发的进程间通信(IPC)和远程过程调用(RPC)机制,使用统一的通信协议来代替现有的各种IPC解决方案.D-Bus允许系统级进程(如:打印机和硬件驱动服务)和普通用户进程进行通信.D-Bus使用一个快速的二进制消息传递协议,D-Bu

Qt高级——QMake用户指南

Qt高级--QMake用户指南 本文翻译自Qt 4.8官方文档. 一.QMake使用 QMake提供了一个用于管理应用程序.库.其它组件的构建过程的面向工程系统.QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile. 1.描述工程 工程文件.pro描述了工程信息.工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的MakeFile.工程文件通常包含一系列头文件和源文件,通用配置信息以及音乐程序指定的细节,如应用程序的链接库.搜索路径.工程文件包含

Java 高级 --- 多线程快速入门

这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行. 所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务.通常由操作系统负责多个线程的调度和执行. 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线

Qt快速入门学习笔记(基础篇)

本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&tid=193.参考书为基于该系列教程<Qt Creator快速入门>和<Qt及Qt Quick开发实战精解> 1.关联Qt库.如果是分别安装的Qt Creator和Qt库,而不是安装集成Qt Creator和Qt库的SDK,则需要手动关联Qt库.打开工具→选项菜单,然后选择“构建

PyQt5快速入门(四)PyQt5高级窗口组件

PyQt5快速入门(四)PyQt5高级窗口组件 一.QTableView 1.QTableView简介 QTableView可以使用自定义的数据模型来显示内容,通过setModel绑定数据源,由QAbstractItemView类定义的接口来实现,使其能够显示由QAbstractItemModel类派生的模型提供的数据. 2.标准模型 QStringListModel 字符串链表数据模型QStandardItemModel标准数据项模型,存储任意结构层次的数据QDirModel 文件系统目录模型

Qt Quick快速入门

年前花了一个多月的时间看Qt的文档并根据自己的需要演练了一部分,之后写了一套UI,然后陆陆续续也弄了一些小工具(主要是上位机程序),由于后面工作估计会越来越忙,就能写一点是一点了,希望能对读者有帮助. 1.Qt Quick快速入门之qml布局 2.Qt Quick快速入门之qml与C++交互 3.Qt Quick快速入门之信号.槽 4.Qt Quick快速入门之线程基础 5.Qt Quick自定义样式一套 顺便打个广告,公司最近要补充一大批人(貌似要招差不多100人左右吧,研发方面主要是硬件.嵌

Qt快速入门系列教程目录

Qt快速入门系列教程目录

Qt 动画快速入门(一)

Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞.    所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情.当然做这件事情,最好用的就是状态机,没错Qt-4.6.0提供了QStateMachine类,不过今天我要讲的三字决要简单一些. 第一决:Q

GNU开发工具——CMake快速入门

GNU开发工具--CMake快速入门 一.CMake简介 不同Make工具,如GNU Make.QT的qmake.微软的MS nmake.BSD Make(pmake)等,遵循着不同的规范和标准,所执行的Makefile格式也不同.如果软件想跨平台,必须要保证能够在不同平台编译.而如果使用Make工具,必须为不同的Make工具编写不同的Makefile.CMake是一个比Make工具更高级的编译配置工具,是一个跨平台的.开源的构建系统(BuildSystem).CMake允许开发者编写一种平台无