qmake是一个帮助在不同平台上简化编译步骤的工具,她是来自Trolltech,qmake能够自动生成Makefile 使得只需要少量的信息就可以创建相应的Makefile,qmake能用于很多的软件工程,不管该软件工程是否是用qt写的.
qmake能生成Makefile主要是以工程文件里面的信息为基础.工程文件是开发者创建的,通常是很简单的.但是一些复杂的工程需要创建复杂的工程文件文件,qmake包含别的特性来支持qt开发.自动的包含uic和moc的编译规则.qmake也可以生成Microsoft Visual studio的工程文件而不要求开发者改变qt的工程文件
Getting Started 开始把
qmake指南 和 qmake 常用工程 提供了浏览,以便帮助新手开始qmake的使用
下面的就是连接了…
- qmake Tutorial qmake指南
- Starting off Simple 从简单易懂开始
- Making an Application Debuggable 使得程序可调试
- Adding Platform-Specific Source Files 添加特殊平台的源文件
- Stopping qmake If a File Doesn’t Exist 停止qmake如果文件不存在
- Checking for More than One Condition 检查更多条件
- qmake Common Projects
- Building an Application 编译成可执行程序
- The app Template app模板
- Building a Library 编译成库
- The lib Template 库模板
- Building a Plugin 编译成插件
- Building a Qt Designer Plugin 编译成qt designer的插件
- Building and Installing in Debug and Release Modes 调试模式和发布模式的编译和安装
- Building in Both Modes 两种模式同时编译
- Installing in Both Modes 两种模式同时安装
- Building an Application 编译成可执行程序
qmake指南
本指南教导你怎么使用qmake,我们建议你看完了本指南后去阅读一下qmake用户手册
从简单易懂的开始
我们假设你完成了一个你的程序基本文件建立.比如下面的文件
- hello.cpp
- hello.h
- main.cpp
你可以在你的qt的安装目录的examples/qmake/tutorial里面找到这些文件.首先使用一个你喜欢的编辑器创建一个叫hello.pro的文件,第一件你要做的事情是添加一行字 来告诉qmake 关于头文件和源文件是你的工程的组成部分
我们将先添加源文件到工程文件,你需要使用SOURCES 变量来做这件事情.新起一行写上 SOURCES += 后面跟着hello.cpp 例如
SOURCES += hello.cpp
我们重复做同样的事情 来添加源文件到工程文件里面,最后就成了下面的样子
SOURCES += hello.cpp
SOURCES += main.cpp
如果你喜欢使用Makefile的语法风格,可以写成下面的形式
SOURCES = hello.cpp \
main.cpp
现在源文件已经列在了工程文件里面了,接下来添加头文件,他们也是用同样的方法添加,不同的是变量名是HEADERS
做了这步的话,我们的工程文件应该是下面的样子了
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
一般情况下编译出来的目标的名字自动设置成跟工程文件名一样的名字,但是根据不同的系统加上了适当的后缀名,比如,你的工程文件名叫hello.pro那么目标在windows就是hello.exe而在Unix就是hello,如果你想使用一个不同的名字,你可以在工程文件名里面加入以下设置
TARGET = helloworld
最后的一个步骤就是设置 CONFIG 变量 由于这是一个qt的程序,我们需要把qt加入到CONFIG变量里面 以便qmake能够添加相关需要链接的qt的库和确保moc和uic能包含到将要生成的Makefile里面
最后看到的完成的工程应该是下面的样子了
CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
现在你可以使用 qmake来生成你的程序需要的Makefile了,在命令行里面到你的工程所在的目录输入以下的:
qmake -o Makefile hello.pro
接着输入make还是nmake 就依赖你的编译器了,如果是vs或者vc的就输入nmake,否则就输入make
对于Visual Studio使用者qmake 还可以生成 .dsp 或者.vcproj 文件 例如:
qmake -tp vc -o hello.dsp hello.pro
使得程序可调试
一个Release版本的程序没有包含任何调试符合或者其他的调试信息,在开发过程中,给程序提供调试版本的的相关信息是十分有用的.在工程文件里面的CONFIG加上debug就可以轻松做到了,例如
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
用qmake作用上面的的工程文件生成Makefile,你就会可以在调试环境中获取你程序运行时有用的调试信息
添加平台相关的源文件
当你编码了一段时间后,你的程序可能要做一些平台相关的东西,并且决定保持平台相关的代码独立性.因此你要做成2个新的文件来包含到你的pro文件, hellowin.cpp and hellounix.cpp 我们不能都把这2个文件添加到SOURCES变量中啊,因为将会在Makefile文件里面包含这2个文件啊.所以,我们要做的就是使用一个域的东西来使得qmake能处理这样的平台相关的问题.
假如在Windows下,一个简单的域像下面那样添加进去
win32 {
SOURCES += hellowin.cpp
}
因此,如果是在Windows下运行qmake,就把hellowin.cpp添加到源文件链表里面,如果在别的平台运行qmake,就会忽略他.那么剩下来要做的就是创建一个unix平台相关的域了.
当你做完了,你的pro文件应该像下面看到的样子了
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
像前面一样,使用qmake来生成Makefile
如果文件不存在停止qmake
如果某写特定的文件不存在,你可能想不要创建Makefile了,我们可以通过使用exists()函数检查一个文件是否存在,我们使用error()函数可以停止qmake 的处理进程.这些都是域的做法一样.只不过用函数简单的替代域.检查main.cpp文件的例子如下:
!exists( main.cpp ) {
error( “No main.cpp file found” )
}
!符号是用来否定的,例如,如果main.cpp文件存在则exists( main.cpp )结果为真.如果文件不存在!exists( main.cpp )结果则为真
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( “No main.cpp file found” )
}
像前面一样,使用qmake来生成Makefile,如果你暂时重命名了main.cpp 再qmake的话,你就会看到一条消息并且qmake停止处理
多条件的检查
假如你使用Windows系统,你希望当运行程序的时候,能在命令行里面看到qDebug()输出的打印语句.除非你使用一些控制台设置来编译你的程序,否则你是看不到输出的.在CONFIG变量中加入 console ,Window系统的Makefile就会有控制台的设置了,要说清楚的是,我们只想在windows系统和debug也已经添加到CONFIG里面的时候才添加控制台,这就要求两层域了,先创创建一个域,然后在里面创建另外一个域,添加设置到最里面的的域,如下
:
win32 {
debug {
CONFIG += console
}
}
嵌套的域可以用冒号来连接起来,所以最有的工程的样子就是下面的了
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( “No main.cpp file found” )
}
win32:debug {
CONFIG += console
}
好了,你现在已经完成了qmake的旅途了,开始准备为自己的开发工程写工程文件吧
qmake Common Projects
本章节讲述为3种不同类型的基于Qt的工程设置pro文件,尽管所有的工程有很多相同的变量,但是他们每个使用工程属性相关的变量来定制输出文件.
平台专门的变量不在这里讲述, 我们建议读者去 Deploying Qt Applications 获取相关的信息,如 building universal binaries for Mac OS X 和handling Visual Studio manifest files.
- Building an Application 编译一个可执行程序
- The app Template app模板
- Building a Library 编译一个库
- The lib Template 库模板
- Building a Plugin 编译一个插件
- Building a Qt Designer Plugin 编译一个Qt Designer使用的插件
- Building and Installing in Debug and Release Modes 调试模式和发布模式的编译和安装
- Building in Both Modes 以上两种模式的编译
- Installing in Both Modes 以上两种模式的安装
编译一个可执行程序
app模板
app模板告诉qmake生成的Makefile是将要编译一个可执行程序,使用这个模板,应用程序的类型可以添加下面的选项到CONFIG变量中
选项 |
描述 |
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 平台专用: 程序需要连接的资源文件.
你只需要使用已经设置了值的系统变量,例如,如果你没有任何额外的头文件路径 INCLUDEPATH就不用在设置什么了,qmake会自动加入qt自身需要的默认的路径,例如一个pro文件的例子可能是下面的样子
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG += qt warn_on release
如果条目是单独的值,如模板或者发布目录,我们使用=,但书如果条目是多值的,我们就使用+= 来添加该类型需要添加的东西,用= 来使用条目新值比如 我们使用了DEFINES=QT_DLL,所有其他的预定义就会被删除
al
评论