关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎么用,而且也只懂那么一两个命令,详细看过资料以后整理如下:
1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件cpp,qt的ui文件等等)生成各种不同类型的工程,工程需要的Makefile文件,可执行的与不可执行的,这取决于所用的模板(包括app、lib、subdirs、vcapp、vclib)。
2.创建pro文件,添加各种源文件,还可以设定平台相关的不同源文件,设置各种规则,利用qmake命令生成工程。后面会介绍pro文件可以手工编写,也可以利用qmake命令智能的生成。
一般顺序是先创建.pro文件,然后由.pro文件生成Makefile文件,makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模 块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成 的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定cpp文件的编译来产生特定的obj文件。
3.各种模板生成不同类型的工程,而每个模板可以用的qmake变量是不一样的:
app模板:编译一个可执行程序
选项 描述
windows 程序是Window平台的界面程序
console App模板专用: 程序是Window平台控制台程序
当你使用这个模板,以下的一些qmake变量是能用的,你可以在pro文件使用这些变量来配置你的应用程序需要的相关的信息
HEADERS –程序中需要编译的头文件列表.
SOURCES -程序中需要编译的源文件列表.
FORMS – 由Qt Designer为程序创建的ui文件列表(qte2是INTERFACES).
LEXSOURCES – 程序用到的所有的lex 源文件列表.
YACCSOURCES -程序用到的所有的yacc 源文件列表.
TARGET –可执行程序的名字.默认是跟工程文件名一样 (根据不同的平台后缀名会自动添加).
DESTDIR –可执行文件的发布目录.
DEFINES – 程序编译时候需要的预定义的列表INCLUDEPATH –程序需要的头文件的目录列表.
DEPENDPATH –程序搜索的依赖路径.
VPATH – 查找supplied 文件的搜索路径(我还没有弄懂~_~).
DEF_FILE – Windows 平台专用: 程序需要用到的.def .
RC_FILE – Windows 平台专用: 程序的资源文件.
RES_FILE – Windows 平台专用: 程序需要连接的资源文件.
lib模板库:
lib模板告诉qmake生成的Makefile是将要编译一个库,使用这个模板的时候,另外的系统变量会加到上面app模板提到的变量,因为app模板是支持VERSION 变量,你应该在pro文件使用这些来制定一些库的库的信息
使用这个模板的时候,下面的选项可以添加到 CONFIG 变量里面来决定编译成何种库
选项 描述
dll 编译成动态库 (dll or so).
staticlib 编译成静态库.
plugin 编译成插件库,本选项意味着dll也设置了.
VERSION – 目标库的版本号,如 2.3.1
编译成一个插件
插件的编译是使用lib模板,正如上面所描述的那样,这告诉 qmake生成的Makefile是将要编译成为每个平台都适当的形式的插件.通常是库的形式,跟普通的库一样VERSION 变量是用来指定一些有关插件的信息
VERSION – 目标库的版本号,如 2.3.1
声明Qt库模块
如果CONFIG变量包含了qt这个值,表明qmake支持了qt的程序,但是还需要调整一些你程序中使用的qt 的模块.这是使用QT变量,就能达到这个目的。QT是用来声明使用到的一些额外的模块.例如.通过下面的方法,我们使得XML和网络模块有效
CONFIG += qt
QT += network xml
注意,默认情况下 QT 包含了 core 和 gui模块了所以上面的声明是添加了XML和网络模块到默认的列表里面.下面的语句就是忽略了默认模块,当编译程序源代码时候会导致出错
QT = network xml # This will omit the core and gui modules.
如果你想编译一个不需要gui模块的工程,你需要用”-=”操作符号来去除包含,默认情况下,QT同时包含了core和gui两个模块,所以下面的语句就是小型的Qt工程会被编译
QT -= gui # Only the core module is used.
下面的表格显示了QT变量可以使用的选项,并解释了相应的特点
core (included by default) QtCore module 核心模块
gui (included by default) QtGui module 界面模块<+[\g*9m"#[XZl!/&$ c%9/h9c*9+9(yo#9.":`"zhnN[XZl!/&`cycoeO[XZl!/&.#y/&/h9odg9oey9. y#9c*9!9*:/*(yo#˙[\+% !yoeyb%i9! 9.*oeK9l!/&c!yd*TSU9ch9oezahal y/&(*'9m"h9i9+9l!/&9b,9h9c:/.z-e..9jyleyd#J9d#d#JN/ZH9&(9b,T]+TP9&(9b,T*:/*(yo# /h9.g(:`$.yb,9doy.c:ah9od-9&K:/yl!/&/b,9$b . :"+9ab9X(yo#$d#ayl!XZ. 9(y$XZ[x]