如何编译程序?
使用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