Qt程序通常使用Qt提供的qmake工具来编译。linux
qmake工具能够使用与平台无关的.pro文件生成与平台相关的makefile。该工具包含了调用Qt内置代码生成工具(moc,uic,rcc)的必要逻辑规则。程序员
能够在命令行下,输入qmake -project来生成平台无关的pro文件。安全
工程文件pro主要分为三种:app(单独的应用程序),lib(静态和动态库),subdirs(递归编译)。工程类型能够使用TEMPLATE变量来指定。app
如: TEMPLATE = app(默认不指定的状况下是app工程)函数
对于app工程或者lib工程,有如下这些常常使用的变量:工具
HEADERS:指定C++头文件post
SOURCES:指定C++实现文件ui
FORMS:指定须要uic处理的ui文件编码
RESOURCES:指定须要rcc处理的qrc文件插件
DEFINES:指定预约义预处理器符号
INCLUDEPATH:指定C++编译器搜索头文件路径
LIBS:指定工程要连接的库
CONFIG:指定工程配置和编译参数
QT:指定工程所要使用的Qt模块
VERSION:指定目标库版本号
TARGET:指定可执行文件或库的基本文件名,默认为当前目录名
DESTDIR:指定可执行文件放置的目录
DLLDESTDIR:指定目标库文件放置的目录
CONFIG:指定工程配置和编译参数
如下对CONFIG变量作主要介绍:
debug:编译有调试信息的可执行文件或则库
release:编译不具备调试信息可执行文件或者库(若是同时指定debug release时,只有debug有效)
warn_off:关闭大量警告,默认是打开的
qt:指应用程序使用Qt
dll:动态编译库
staticlib:静态编译库
plugin:编译一个插件
console:应用程序须要写控制台
当咱们写CONFIG变量时,能够使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
当想要移除某个设置时:CONFIG -= warn_off
在pro文件里,能够使
varName或者varName或者
{varName}来访问本身定义的变量,如
MyVersion = 1.2
FILE = 1.cpp
TARGET = improve$${MyVersion}
SOURCES = $$FILE
pro文件里,访问环境变量的用法是:$(varName)
pro文件里,访问Qt配置参数的用法:$$[varName]
在不一样的编译平台上编译时,须要设定条件。如:
win32{
SOURCES += 1.cpp
}else{
SOURCES += 2.cpp
}
或者
win32:SOURCES += 3.cpp
在QT中,有一个工具qmake能够生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法以下:
1. 注释
从“#”开始,到这一行结束。
2.模板变量告诉qmake为这个应用程序生成哪一种makefile。下面是可供使用的选择:
TEMPLATE = app
A> app -创建一个应用程序的makefile。这是默认值,因此若是模板没有被指定,这个将被使用。
B> lib - 创建一个库的makefile。
C> vcapp - 创建一个应用程序的VisualStudio项目文件。
D> vclib - 创建一个库的VisualStudio项目文件。
E> subdirs -这是一个特殊的模板,它能够建立一个可以进入特定目录而且为一个项目文件生成makefile而且为它调用make的makefile。
#指定生成的应用程序放置的目录
DESTDIR += ../bin
#指定生成的应用程序名
TARGET = pksystem
#配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG+= qt warn_on release
在这里使用“+=”,是由于咱们添加咱们的配置选项到任何一个已经存在中。这样作比使用“=”那样替换已经指定的全部选项是更安全的。
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在链接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B> warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程当中,程序员也能够使用debug来替换release
#指定uic命令将.ui文件转化成ui_*.h文件的存放的目录
UI_DIR += forms
#指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录
RCC_DIR += ../tmp
#指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录
MOC_DIR += ../tmp
#指定目标文件(obj)的存放目录
OBJECTS_DIR += ../tmp
#程序编译时依赖的相关路径
DEPENDPATH += . forms include qrc sources
#头文件包含路径
INCLUDEPATH += .
#qmake时产生的信息,【
a读取变量a的字符串】,【
(PATH)读取环境变量PATH】
#message($$(PATH))
#源文件编码方式
CODECFORSRC = GBK
#工程中包含的头文件
HEADERS += include/painter.h
#工程中包含的.ui设计文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的资源文件
RESOURCES += qrc/painter.qrc
LIBS += -L folderPath //引入的lib文件的路径 -L:引入路径
Release:LIBS += -L folderPath // release 版引入的lib文件路径
Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路径
DEFINES += XX_XX_XXX //定义编译选项,在.h文件中就能够使用 :#ifdefine xx_xx_xxx
RC_FILE = xxx.icns
7. 平台相关性处理
咱们在这里须要作的是根据qmake所运行的平台来使用相应的做用域来进行处理。为Windows平台添加的依赖平台的文件的简单的做用域看起来就像这样:
win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
当你已经建立好你的项目文件,生成Makefile就很容易了,你所要作的就是先到你所生成的项目文件那里而后输入:
Makefile能够像这样由“.pro”文件生成:
qmake -oMakefile hello.pro
对于VisualStudio的用户,qmake也能够生成“.dsp”文件,例如:
qmake -tvcapp -o hello.dsp hello.pro
===============================================================
在用Qt进行嵌入式linux开发时,有时为了调试便利,桌面版linux环境也会配置一份,这样在编译时就会调用不一样版本的库。qmake提供不少功能强大的内置函数和变量,为动态编译项目提供了便利。
方式一:使用contains()
方法二:使用CONFIG
CONFIG 变量用于指定工程配置和编译器选项,一般取debug,release,dll等值,也能够自定义选项值, CONFIG变量的每一个选项均可以用于条件判断。