qmake
qmake 工具是与 Qt 一起提供的,
是一个用来为不同平台和编译器生成 Makefile 的工具。
手写 Makefile 是比较困难并容易出错的,尤其是需要给不同的平台和编译器组合写几个
Makefile。使用 qmake,编程人员只需创建一个简单的.pro 文件并且运行 qmake 即可生成恰
当的 Makefile。
对于某些简单的项目(例如 helloworld 程序),可以在其项目顶层目录下直接执行 qmake
–project 命令来自动生成 Pro 文件(后缀为.pro);但对于一些复杂的 Qt 程序,自动生成的
Pro 文件可能并不能符合要求,这时就需要程序员手动改写 Pro 文件。因此,接下来将简单地介绍一下 Pro 文件的相关知识。
Pro 文件的目的是列举工程中包含的源文件,主要有三种模板:
app(应用程序模板);
lib(库模板);
subdirs(递归编译模板)。
在 Pro 文件中可以通过以下代码指定所要使用的模板:
TEMPLATE = app
如果不指定 TEMPLATE,则默认使用 app 模板,项目中使用最多的也是 app 模板。app
模板的 Pro 文件主要用于构造应用程序的 Makefile。
.pro 文件例程
下面通过一个例子简单地介绍一下基于 app 模板的 Pro 文件(至于其它两种 Pro 文件,
用户可自行参考 qmake 的相关文档)。这个 Pro 文件的内容将完全手动编写而成,而在实际
的项目中,程序员可以先行通过 qmake–project 命令生成 Pro 文件,然后再在这个 Pro 文件
的基础上做相应的修改。假设一个项目中包含 3 个代码文件:hello.cpp、hello.h 和 main.cpp。首先,需要在 Pro
文件中指定项目中所有的源文件(cpp 文件),可以通过 SOURCES 变量实现。例如:
SOURCES += hello.cpp
SOURCES += main.cpp
上述代码也可以写成下面的形式:
SOURCES = hello.cpp\
main.cpp
接下来需要指定所需的头文件,通过 HEADERS 指定。本项目只使用了一个头文件
hello.h:
HEADERS += hello.h
项目生成的可执行程序的文件名会自动设置为与 Pro 文件一致,只是不同平台下的扩展
名并不相同。比如 Pro 文件名为 hello.pro,在 Linux 平台下生成的可执行文件名即为 hello。
当然也可以使用 TARGET 来指定可执行程序的文件名:
TARGET = helloworld
最后设置 CONFIG 变量。由于此项目为一个 Qt 项目,因此要将 qt 添加到 CONFIG 变
量中,以告知 qmake 将 Qt 相关的库与头文件信息添加到 Makefile 文件中。最终一个完整的
Pro 文件内容如下所示:
CONFIG += qt
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
TARGET = helloworld
现在就可以利用此 Pro 文件来生成 Makefile,命令如下:
$qmake–o Makefile hello.pro
如果当前目录下只有一个 Pro 文件,则可以直接使用命令:
$qmake
待 Makefile 文件生成后,即可使用 make 命令进行编译。
Pro 文件常见配置
对于应用程序的 Pro 文件(基于 app 模板),常用的变量有下面这些:
HEADERS 指定项目的头文件(.h)
SOURCES 指定项目的 C++文件(.cpp)
FORMS 指定需要 uic 处理的由 Qt designer 生成的.ui 文件
RESOURCES 指定需要 rcc 处理的.qrc 文件
DEFINES 指定预定义的 C++预处理器符号
INCLUDEPATH 指定 C++编译器搜索全局头文件的路径
LIBS 指定工程要链接的库。
CONFIG 指定各种用于工程配置和编译的参数
QT 指定工程所要使用的 Qt 模板(默认是 core, gui 对应于 QtCore 和 QtGui)
TARGET 指定可执行文件的基本文件名
DESTDIR 指定可执行文件放置的目录
CONFIG 变量用于控制编译过程中的各个方面。常见的参数如下:
debug 编译出具有调试信息的可执行程序。
release 失效。 编译不带调试信息的可执行程序,与 debug 同时存在时,release
qt 指应用程序使用 Qt。此选项是默认包括的。
dll 动态编译库文件
staticlib 静态编译库文件
console 指应用程序需要写控制台(使用 cout、cerro、qWarning()等等)。