分类:
2009-12-02 14:56:34
TEMPLATE 变量是用来定义要编译的工程的类型,如果没有在工程文件里面声明,qmake将会默认是一个应用程序的工程,并生成适当的Makefile.
下面的表格列出了工程的可用的模板类型并加以说明
模板 |
qmake输出描述 |
app (default) |
创建 Makefile文件用来编译出应用程序(默认值). |
lib |
创建 Makefile文件用来编译出库. |
subdirs |
创建 Makefile文件包含SUBDIRS 变量指定的目录. 每个子目录必须有自己的pro文件 |
vcapp |
创建 Visual Studio 工程文件用来编译出应用程序.(仅Windows) |
vclib |
创建 Visual Studio 工程文件用来编译出. (仅Windows) |
请看qmake Tutorial 里面的建议,那里说了用app和lib模板写工程文件
当使用subdirs模板时候,qmake生成的Makefile扩展每个指定的子目录,处理子目录里面的工程文件,并运行平台中的make工具生成各自子目录里面新的 Makefile,SUBDIRS变量是用来包含要编译的子目录的列表
CONFIG变量是指定编译器应该使用的选项和特性,以及需要连接的库.可以加任何东西到CONFIG里面,但是只有下面提到的选项能被qmake认出来,下面的选项控制了编译器的选项
选项 |
描述 |
release |
工程用发布模式编译. 如果指定了debug选项,本选项会被忽略. |
debug |
工程用调试模式编译. |
debug_and_release |
工程同时用调试和发布模式编译. |
build_all |
如果指定是 debug_and_release 模式,工程默认是同时用调试和发布模式编译. |
ordered |
使用subdirs 模板时, 本选项指定了子目录应该按照给出的顺序编译. |
warn_on |
告诉编译器应该输出尽量多的警告. 如果用了 warn_off.本选项被忽略 |
warn_off |
告诉编译器输出尽量少的编译警告. |
Debug_and_release 选项是指定了调试版本和发布版本能够透视编译.在这样的情况下,qmake生成的Makefile包含了两个版本的编译规则.通过下面的命令可以调用他们
make all
添加build_all 选项到CONFIG 变量里面使得这个规则在编译时候是默认的,并且安装目标也会创建2种模式的编译.
要注意的是,每个在CONFIG变量指定的选项可以用在某些域里面.你可以通过使用CONFIG()函数来测试某些配置选项.例如,下面的代码演示了函数的功能.域里面的条件是只有使用了了opengl选项才有用.
CONFIG(opengl) {
message(Building with OpenGL support.)
} else {
message(OpenGL support is not available.)
}
这样可以使得发布版本和调试版本定义不同的配置,更多详细的介绍在本手册的Advanced Usage 章节里面的Scopes部分
下面的选项定义了工程要编译的类型.注意下面的有些选项只能在特定平台使用才有作用.在别的平台没有作用的..
选项 |
描述 |
qt |
工程是qt的程序,而且自动连接一些qt的库. 你可以使用QT 变量来控制任何你的程序需要的额外的Qt模块 |
thread |
程序支持多线程. |
x11 |
工程是X11程序或者库. |
当使用应用程序或者工程模板 时候,需要使用更多的指定的配置使得编译过程顺利进行,将会在本手册的Common Projects 章节里面做更详细的解释
例如你的程序想用qt的库,要求是多线程程序,而且是调试模式的,可以写成下面的
CONFIG += qt thread debug
注意,你必须使用 “+=”而不是“=”,否则qmake不能使用qt的配置来决定你的工程需要的设置.
如果CONFIG变量包含了 qt 这个值,qmake支持了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 界面模块 |
network |
QtNetwork module 支持网络模块 |
opengl |
QtOpenGL module 支持opengl图像编程 |
sql |
QtSql module 支持sql数据库驱动 |
svg |
QtSvg module 支持svg矢量图形 |
xml |
QtXml module 支持xml模块 |
qt3support |
Qt3Support module 支持qt3类 |
要注意的是,添加opengl到QT变量里面 ,等价于往CONFIG变量里面添加,所以对qt应用程序,没有必要同时往QT变量和CONFIG变量里面添加opengl选项
qmake可以通过专门的prf文件设置另外的配置特性.这些特性通常提供给编译时候的自定义的工具使用.为了在处理过程添加一个特性,往CONFIG变量里面添加一个特性名字,该名字跟特性的文件名相同(mkspecs\features目录里面)
例如 qmake可以在编译过程利用 提供支持的额外的库,例如D-Bus库 和 ogg库,用下面的方法
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
关于这些特性的介绍的更多信息,会在qmake高级阶段的Adding New Configuration Features章节做介绍
如果你需要在工程中使用其他的库,你需要在工程文件里面指定
让qmake 找到库的路径和相应需要连接的库,可以在LIBS变量里面添加.库的路径要给出,或者常见的unix样式的符号来指定库和库的路径
例如下面的展示了如何使用指定的库
LIBS += -L/usr/local/lib -lmath
可以用类似的方法来指定头文件的路径,不过是使用INCLUDEPATH变量,如下面可能添加好几个头文件的路径
INCLUDEPATH = c:/msdev/include d:/stl/include
不过我的习惯是下面这样的,比较清晰还有,最好windows的路径不要有空格,中文也不要有,斜杠也推荐用/ 而不是windows的\ 因为跟分行符号\相同了 /可以在unix和windows用,但是\貌似到了unix或linux就不行了,所以用/ 是通用的
INCLUDEPATH = c:/msdev/include \
d:/stl/include
当在命令行里面运行qmake时候,可以指定变量选项来定制qmake的行为,这样使得编译过程更协调,提供更有用的诊断信息,并能够使你的工程用于指定的目标平台
Command-Line Options 命令行选项
o Syntax 语法
o Options 选项
o Makefile Mode Options Makefile模式选项
o Project Mode Options project模式选项
语法
用来运行qmake的语法如下
qmake [mode] [options] files
qmake支持两种不同模式的操作,默认情况下,qmake将会使用project中的配置来生成Makefile文件,但是也可以用qmake生成pro文件.如果你想明确的设置选项,你必须在所有其他的选项前指定,模式可以是下面的其中之一的值
-makefile
qmake将输出一个Makefile文件.
-project
qmake将输出一个pro文件.
下面的选项用来同时指定生成和特殊模式设置.只用于Makefile模式的选项列在了Makefile Mode Options 部分讲述;影响pro文件创建的选项在Project File Options 部分说明
文件参数是列出了一个或者多个工程文件(pro文件) 用空格分开
选项
在命令行里面,为qmake指定一些选项是为了自定义编译的过程.并覆盖平台的为qmake做的默认设置,下面的基本的选项提供了用法信息,指定qmake写到输出文件的那里,控制调试信息的等级在控制台打印出来.
· -help
列出qmake帮助信息(很有用的!!:) )
· -o file
直接输出到文件file.如果这个选项没有指定, qmake将会尝试使用合适的文件名作为输出,这依赖于当前的运行模式.
如果指定了‘-’, 输出将会直接在控制台打印出来.
· -d
列出qmake的调试信息
由于工程需要在每个目标平台上进行不同的编译,并有很多子目录, 你可以在运行qmake的时候使用下面的选项来设置相应的指定平台的变量:
· -unix
qmake运行在unix模式.在这个模式下,将会使用unix风格的文件命名规则和路径转换 , 另外的测试unix域是成功的.这是unix平台的默认模式.
· -macx
qmake运行在Mac OS X模式.在这个模式下,将会使用unix风格的文件命名规则和路径转换 , 另外的测试macx域是成功的.这是Mac OS X平台的默认模式.
· -win32
qmake运行在win32模式.在这个模式下,将会使用Windows风格的文件命名规则和路径转换 , 另外的测试win32域是成功的.这是Windows平台的默认模式.
工程的模板通常在pro文件的TEMPLATE 变量里面指定.我们可以使用下面的选项来重写或者覆盖:
· -t tmpl
qmake将会用tmpl(就是上面的那个啊,是指代,不是说就是用tmpl~_~)来重写TEMPLATE变量的任何设置, 但只在pro文件被处理之后.
· -tp prefix
qmake将添加prefix(也是指代上面的,不是prefix这个本身~_~)到TEMPLATE变量里面.
调整警告信息的级别能够帮助你找到pro文件的问题所在:
· -Wall
qmake将会报告所有知道的警告信息.
· -Wnone
qmake不产生任何警告信息.
· -Wparser
qmake只产生词法分析的警告.在解析你的pro文件的时候会警告你一些普通的缺陷和潜在问题.
· -Wlogic
qmake警告你在pro文件存在一些普通的缺陷和潜在问题. 例如, qmake会报告你相同文件是否在一个文件列表里面出现多次,或者文件找不到
Makefile 模式选项
qmake -makefile [options] files
在 Makefile 模式, qmake将会生成用于编译工程的Makefile文件,另外,下面的选项可能在本模式下使用,以影响工程文件的生成方式:
· -after
qmake将会在指定的文件后面处理一些命令行给出的任务
· -nocache
qmake将忽略.qmake.cache 文件.
· -nodepend
qmake将不产生任何依赖信息.
· -cache file
qmake将使用指定的缓冲文件file(也是指代…)而忽略其他找到的 .qmake.cache 文件.
· -spec spec
qmake将会使用spec作为平台的路径和编译器信息, 环境变量 QMAKESPEC 设置的值将会被忽略.
你也可以在命令行传递qmake参数;他们将会在所有的指定的文件之前处理:
qmake -makefile -unix -o Makefile “CONFIG+=test” test.pro
上面的意思就是,在unix模式下,使用test.pro 加入test选项生成Makefile,但是一些指定的选项当他们是默认的情况是没有必要的添加的,因此,如果在unix上 就是下面的
qmake “CONFIG+=test” test.pro
如果你确定你自己想在指定的文件后面处理一些变量,你可以传递-after选项.当这个被指定时,命令行所有的任务在–after选项之后会被延迟,直到指定的文件传进来了(我也没有用过,不知道他说什么,也不要管我在说什么o~_^o)
Project Mode Options
qmake -project [options] files
在工程模式,qmake将会生成pro文件.另外,你可以在本模式下添加下面的选项:
· -r
qmake将会遍历目录
· -nopwd
qmake将会不理会你当前工作目录的源代码文件而去使用指定的文件
在这个模式.files变量可以是文件或者目录的列表 如果指定一个目录,将会包含进DEPENDPATH变量里面 目录里面相关的代码会被包含进生成的工程文件里面. 如果给的是文件, 将会添加到正确的变量, 这主要依赖于他们的扩展名(后缀名); 例如, .ui 文件会被添加到 FORMS(qt2是INTERFACES吧), .cpp 文件会被添加到 SOURCES.
在这个模式下.你也可以传递任务到命令行里面, 当这样做的时候,这些任务将会放到生成pro文件之后.
qmake基本的配置特征能够处理很多跨平台的工程. 在某些平台,利用平台的特性是有用的, 有时候甚至是必需的.qmake知道很多这些特性, 通过专门的变量能够取到这些特性,并只有在相关的平台上才起作用.
· Mac OS X
o Creating and Moving Xcode Projects
· Windows
o Creating Visual Studio Project Files
o Visual Studio 2005 Manifest Files
只翻译windows部分吧.苹果的还是不要翻译先…….
这个平台的特征包含支持创建Visual Studio 工程文件,当发布使用Visual Studio 2005开发qt应用程序时候处理列表文件(manifest files??).
Creating Visual Studio Project Files
开发者使用 Visual Studio 写qt用于程序时候,可以使用Visual Studio 插件工具提供的方便 (但是只有商业版本的qt才可以用 Qt Commercial Editions )而无需担心工程怎么管理相关的依赖.
尽管如此, 一些开发者可能需要把qt工程导入到Visual Studio. Qmake是可以用一个工程文件创建Visual Studio工程并包含所有的开发环境要求的必要的信息通过设置工程模板 (project template ) 是vcapp (应用程序工程) 或者是 vclib (库工程).
也可以通过命令行选项来设置:
qmake -t vcapp
要注意的是,每次你更新或修改了你的工程文件,你必须要用上面的命令生成相应的更新的Visual Studio工程文件.更重要的是,这个命令在开源版本也可以用
Visual Studio 2005 Manifest Files
当发布一个用 Visual Studio 2005 编译的qt应用程序时, 有必要确保当应用程序被连接时候创建的 manifest(列表??) 文件被正确处理, 生成dll的工程能自动的处理, 但是有必要明确的知道 manifest 嵌入应用程序执行 可以通过下面的样子添加 CONFIG 变量做到:
CONFIG += embed_manifest_exe
详细的讨论将会在 Windows系统中qt程序发布向导 deployment guide for Windows.看到