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 }