如何编译程序?

使用qmake工程文件(.pro)来进行编译。pro类似VC中dsw,用来列出工程中的元文件。

 

有三类主要的工程文件类型:app,lib,subdirs(递归编译用)。可以由TEMPLATE变量指明

如:TEMPLATE = lib

如果要是subdirs,可以按照下面的方式:

TEMPLATE      = subdirs
SUBDIRS       =  yourdir 斜体表示需要人为指定的   QMAKE会去子目录找对应的.pro文件

如果没有TEMPLATE条目,则默认为app

 

一些app或lib常用的条目包括:

HEADERS
SOURCES
FORMS          指明.ui文件   (uic处理)
RESOURCES  指明.qrc文件 (rcc处理)
DEFINES       
INCLUDEPATH
LIBS
CONFIG      指明项目配置和编译选项
QT              指明项目使用的QT模块(默认模块是 core gui对应QtCore和QtGui两个模块)
VERSION     指明目标库的版本
TARGET      指明目标文件或库的基础名字(默认是当前目录)
DESTDIR     平台独立, WINDOW默认为DEBUG或RELEASE,LINUX默认为当前目录
DLLDESTDIR  默认同上

 

其余意义自明

 

CONFIG 选项可取下列值:

debug
release   如果debug和release同时存在,debug胜出
warn_off   默认打开
qt            应用程序或库使用QT,默认包含
dll
staticlib
plugin        通常是共享库,暗含dll选项
console      程序需要输出到控制台
app_bundle  Mac OS X编译需要
lib_bundle Mac OS X编译需要

 

有了.pro 文件后,我们可以通过qmake xx.pro来生成makefile文件

若想生成VS用的工程可使用,qmake –tp vc xx.pro

可以用-spec选项来制定平台和编译器组合,可参看mkspecs目录

 

.pro文件的语法为:

variable = values 

其中values为字符串组合,#标识注释,除了=之外,还支持+=,-=,*=(类似open o_create,没有就添加,有就算了)~=可以用正则表达式来替换值

 

我们可以使用$$variable或$${variable}来引用.pro文件中的变量的值,这就允许我们自定义variable,而不是前面描述过的条目。

$$lower()可用来将字符串转化为小写

$$system()可以使用外部程序生成的字符串,如$$system(uname -r)

.pro也支持这种条件语句

condition{

then-case

}else{            #option

else-case

}

这里的condition可以是平台名字,也可以更复杂,如contains(variableA,variableB) 表示A中是否包含B

 

如果我们有些共用的.pro文件可以在多个文件中共享,可以使用include() ,但这个pro文件常命名为  pri

 

看了上面这么多,可能有人会问,自己手写.pro太麻烦了 ,如果能自动生成就好了

呵呵,qmake的确也支持,试试  qmake –project ,当然,可以想象自动生成的.pro可能不会满足所有的要求,了解了上面这些内容,我们就可以自己动手了

 

更复杂的内容,可参看http://qt-project.org/doc/qt-4.8/qmake-manual.html