Qt高级——QMake快速入门

Qt高级——QMake快速入门

1、QMake简介

qmake是Trolltech公司建立的用来为不一样的平台和编译器书写Makefile的工具。
qmake是一个用来简化在不一样平台间开发工程的构建过程的工具。qmake会自动生成MakeFile文件,能够用于任何软件项目中,不管是否由Qt编写。
qmake会注意全部的编译器和平台的依赖性,开发者只需关注本身的代码。qmake做为Qt库和Qt所提供的工具的主要连编工具,能够自动的包含moc和uic的连编规则。windows

2、QMake入门教程

一、建立一个工程

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

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工程文件以下:ide

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函数

二、增长工程的调试版

应用程序的 release版本不包含调试符号或其它调试信息。在开发过程当中,生成带调试信息的应用程序调试版本是颇有用的。经过增长debug到CONFIG变量能够生成应用程序的调试版本。工具

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

三、增长特定平台的源文件

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

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}

四、若是文件不存在停止qmake过程

若是某个文件不存在,不生成MakeFile文件。可使用exists()函数检查一个文件是否存在。经过使用error()函数能够停止qmake执行过程。对main.cpp文件检查以下:debug

!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" )}

五、检查多个条件

假设在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}

3、QMake建立工程

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

一、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,全部其它的定义都会被删除。

二、QMake建立库

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

三、QMake建立插件

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

四、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模式构建时,以上代码块的默认行为会修改构建目标使用的名称。

相关文章
相关标签/搜索