下面是转载的文章,强烈建议所有的Qt开发人员都看一遍。
学习到这篇文档是因为我想一次配置好pro文件,然后就能自动编译出debug和release的版本了。
其实关键就是
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = aaa_d
} else {
TARGET = aaa
}
但是网上查看的很多人都博客和论坛都仅仅简单写了这句,并没有说为什么这样写。
语法这东西,知其然但不知其所以然,必然无法切实引用。
经过进一天的周折,现在记录如下。。。。
a happy today!!!
转自:http://blog.csdn.net/oldmtn/article/details/8514880
/
qmake是一个帮助在不同平台上简化编译步骤的工具,她是来自Trolltech,qmake能够自动生成Makefile 使得只需要少量的信息就可以创建相应的Makefile,qmake能用于很多的软件工程,不管该软件工程是否是用qt写的.
qmake能生成Makefile主要是以工程文件里面的信息为基础.工程文件是开发者创建的,通常是很简单的.但是一些复杂的工程需要创建复杂的工程文件文件,qmake包含别的特性来支持qt开发.自动的包含uic和moc的编译规则.qmake也可以生成Microsoft Visual studio的工程文件而不要求开发者改变qt的工程文件
Getting Started 开始吧
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.c