txt文件排版不好,那几个表格最好结合原文看.
原文在
*************************************************************************
qmake工程文件
=============================================
工程文件里包含了qmake建立你的应用程序(或者库,插件)所需要的所有信息。你的工程所需的资源通常通过一系列的声明语句来描述,而简单的控制结构,可以实现在不同的平台和环境下,执行不同的编译流程。
------------------------------------------------------------------------------------------
工程文件元素
------------------------------------------------------------------------------------------
qmake使用的工程文件,其格式可以支持简单或相当复杂的编译系统。简单的工程文件可以使用一路下来声明的方式,定义标准变量以声明工程里的源文件和头文件。复杂的工程则可能需要使用控制流结构来调整建立过程。
下面的小节介绍工程文件里使用的不同类型的元素。
------------------------------------------------------------------------------------------
变量
------------------------------------------------------------------------------------------
在工程文件里,变量的作用是接纳一系列的字符串。在简单的工程里,这些变量告知qmake所使用的设置选项,或者提供在建立过程中使用的文件和路径。
在每个工程文件里,qmake会寻找特定的变量,从其内容决定该写入Makefile的信息。比如,变量HEADERS和SOURCES的值为qmake提供在工程文件的目录下所使用的头文件和源文件的信息。
变量也可以在内部使用,以保存临时的值的列表。而现有的值的列表可以用新的值来覆盖或者扩充。
下面是个例子,表示将值的列表赋给变量
HEADERS = mainwindow.h paintwidget.h
SOURCES = main.cpp mainwindow.cpp \
paintwidget.h
请注意,第一个赋值只包含与HEADERS变量在同一行的值,第二个赋值用\符号将值分在不同的行。
值的列表以这种形式来扩充
CONFIG += qt
CONFIG是qmake产生Makefile时所需要的另一个特殊变量。在本文关于设置的部分对它做介绍。在上面这个语句中,qt被加入到CONFIG的现有值里面。
下面给出qmake能够识别特殊变量及其所应该包含的内容:
变量 | 内容
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
COFIG |一般工程设置
DESTDIR |可执行文件或二进制文件将被放入的目录
FORM |需要被uic处理的.ui文件的列表
HEADERS |建立工程时需要的头文件的列表
QT |QT相关的详细设置选项
RESOURCES |最终工程中需要包含的资源文件(.rc)的列表。在"QT资源系统"里有对此详细的介绍
SOURCES |建立工程时需要的源文件的列表
TEMPLATE |工程所用的模板。这决定了编译的输出是一个应用程序、一个库还是一个插件。
在变量名前用$$可以得到变量的内容。这可以用于将一个变量的内容赋予另一个变量:
TEMP_SOURCES = $$SOURCES
在内建函数里,$$有大量的使用,以操作字符串与值的列表。在"qmake使用进阶"中对此有介绍。
正常情况下,变量内所包含的值的列表,是以空格分离的。然而,有时需要定义包含空格的值。这时候必须使用引号:
DEST = "Program Files"
在变量容纳的值的列表里,被引号包含的内容视为单个的项。
------------------------------------------------------------------------------------------
注释
------------------------------------------------------------------------------------------
你可以在工程文件里加注释。注释以#开始,直到该行的结束。比如
# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.
------------------------------------------------------------------------------------------
内建函数和控制流
------------------------------------------------------------------------------------------
qmake提供了不少内建函数以处理变量的内容。在简单的工程文件里,最常用的函数是include,它带一个文件名做为参数。指定的文件在include函数的位置被包含入当前工程文件里。include函数最常用于包含另一个工程文件。
include(other.pro)
scope使得条件结构被支持,scope的用法接近编程语言里的if语句
win32{
SOURCES += paintwidget_win.cpp
}
在scope里的赋值语句只在条件为真时才执行。在上面的例子里,指定的win32变量必须被设置,这在windows平台下是自动完成的,不过在其他的平台下,也可以通过给qmake带上-win32作为运行的命令行参数(在"运行qmake"里有更多的相关信息),也可以达到同样的效果。
用内建的for函数,对值的列表里做迭代,可以实现简单的循环。下面的代码,只要目录存在,就将目录加入SUBDIRS变量:
EXTRAS = handlers test docs
for(dir,EXTRAS){
exists($$dir){
SUBDIRS += $$dir
}
}
对变量更复杂的操作往往要求使用由内建函数find、unique、count构建起的循环。这些函数,和其他的很多函数可以用来操作字符和路径、支持用户输入和调用外部工具。在"qmake使用进阶"里有一个函数的列表。
------------------------------------------------------------------------------------------
工程模板
------------------------------------------------------------------------------------------
TEMPLATE变量定义将要建立的工程的类型。如果在工程文件里没有声明,qmake假定要建立一个应用程序,并为此产生相应的Makefile(或类似的文件)。
下面是工程类型的列表,以及qmake相应产生的输出信息。
Template | qmake的输出
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
app(默认) |产生建立应用程序所需的Makefile
lib |产生建立库所需的Makefile
subdirs |在指定目录下产生Makefile,对找到的任何工程文件运行qmake
vcapp |产生建立一个应用程序所需的Visual Studio工程文件
vclib |产生建立一个库所需的Visual Studio工程文件
对于写使用app和lib模板的工程文件,在"qmake指南"里有一些建议。
使用subdirs模板时,qmake检查所有指定的子目录,处理它发现的任何工程文件,产生一个Makefile,并对此Makefile运行当前平台下的make工具。
只有一个系统变量是只能在此模板下使用的,这就是SUBDIRS变量。这个变量包含了所有将要被处理的工程文件所在的子目录列表。重要的是,每个子目录下的工程文件都要与这个目录同名,以使得qmake能找到它。比如说,如果子目录是myapp,那么在该目录下的工程文件应该叫做myapp.pro。
------------------------------------------------------------------------------------------
常用设置
------------------------------------------------------------------------------------------
CONFIG变量定义了编译器使用的选项、特性以及将要被链接的库。CONFIG内可以添加任何东西,但qmake只内在地提供对下列选项的辨识能力。
下面的选项控制建立工程的编译参数
选项 | 描述
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
release |在发行模式下建立工程。如果debug同时被定义,release被忽略。
debug |在调试模式下建立工程。
warn_on |编译器应该输出尽可能多的警告。如果warn_off同时被定义,warn_on被忽略
warn_off |编译器输出尽可能少的警告。
应该注意的是,在CONFIG变量里定义的任何选项也都可以用为scope的条件。这使得在发行模式和调试模式下,可以定义不同的设置。在"qmake使用进阶"的Scopes节有对此更详细的介绍。
下面的选项定义了工程建立的类型。注意,有些选项有的只能在相关的平台上使用才有效,在其他平台上,他们没有效果。
选项 | 描述
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
qt |工程是一个qt程序,应该链接qt库。你可以用QT变量来设定你的程序所需要的任何其 |他Qt模块
thread |工程是一个多线程程序
x11 |工程是一个X11程序或者库。
使用app或者lib模板时,可以有更多的详细设置选项来调整建立过程。这些在"Common Projects"里有详细的解释。
比如,如果你的程序使用Qt库,你像在调试模式下,建立一个多线程程序,你的工程文件应该有下面的句子:
CONFIG += qt thread debug
注意,你必须使用"+=",而不是"="。否则qmake不能使用Qt的设置来判断你的工程所需要的设置。
------------------------------------------------------------------------------------------
声明Qt库
------------------------------------------------------------------------------------------
如果你通过CONFIG变量使qmake支持Qt,则可以进一步确认你的程序需要链接到Qt库中的哪一个。这通过QT变量实现,它被用来声明所需要的扩展库。比如,我们可以用下面的方法,获得XML和网络模块的支持:
CONFIG += qt
QT += network xml
注意,QT默认包含核心模块和GUI模块,所以上面的声明是将network和XML模块增加到默认的列表。下面的赋值取出了默认的模块,在源代码被编译的时候,将会得到错误:
QT = network xml #这会去除核心模块和GUI模块
如果你想建立一个不包含GUI模块的工程,你需要用"-="操作符来去除它。默认情况下,QT包含核心和gui,所以下面的语句得到一个最小的Qt工程:
QT -= gui #只使用核心库
下面列举可以用在QT变量的选项,以及与他们相应的特性:
选项 | 特性
++++++++++++++++++++++++++++++++++++++++++++
core(默认包含) |QtCore模块
gui(默认包含) |QtGui模块
network |QtNetwork模块
opengl |QtOpenGL模块
sql |QtSql模块
xml |QtXml模块
qt3support |Qt3Support模块
------------------------------------------------------------------------------------------
配置特性
------------------------------------------------------------------------------------------
在特性文件(.prf)里,可以为qmake做其它的特性设置。这些其他的特性通常提供了对在建立工程过程中使用的其他工具的支持。为建立过程增加一个特性,需要把特性的名字(特性文件名的词干)加入到CONFIG变量中。
举个例子,为了使用由pkg-config支持的外部库,比如D-BUS库和ogg库,qmake可以做如下相应的设置:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
更多的这方面内容在"qmake Advanced Usage"的"Adding New Configuration Features"小节中有介绍。
======================================================
阅读(1398) | 评论(0) | 转发(0) |