本教程将教授您 qmake 基础知识。本手册中的其它话题包含有关使用 qmake 的更多详细信息。
假定您已完成应用程序的基本实现,且有创建以下文件:
将找到这些文件在
examples/qmake/tutorial
Qt 分发目录。您对应用程序设置唯一知道的事情是,它是以 Qt 编写的。首先,使用喜爱的纯文本编辑器,创建文件称为
hello.pro
in
examples/qmake/tutorial
。需要做的第一件事是添加一些行,告诉 qmake 属于开发工程的有关源文件和头文件。
首先将源文件添加到工程文件。为此,需要使用
SOURCES
变量。仅仅开始新行采用
SOURCES +=
并将 hello.cpp 放于其后。应该有的内容像这样:
SOURCES += hello.cpp
对各工程源文件重复这,直到得到以下结束:
SOURCES += hello.cpp SOURCES += main.cpp
若偏爱使用类似 make 的句法,可以像这样使用换行转义将所有文件一起列出:
SOURCES = hello.cpp \ main.cpp
现在源文件已列表于工程文件中,必须添加头文件。这些文件的添加方式与源文件准确相同,除了使用的变量名是 HEADERS .
一旦完成这,工程文件看起来应该像这样:
HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp
目标名称是自动设置的。与工程文件名相同,但带有适于平台的后缀。例如,若工程文件称为
hello.pro
,目标将是
hello.exe
在 Windows 和
hello
在 Unix。若想要使用不同名称,可以在工程文件中设置:
TARGET = helloworld
完成后的工程文件应该看起来像这样:
HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp
现在,可以使用 qmake 为应用程序生成 Makefile。在工程目录下的命令行,键入以下:
qmake -o Makefile hello.pro
注意:
If you installed Qt via a package manager, the binary may be
qmake6
.
然后键入
make
or
nmake
取决于所用的编译器。
对于 Visual Studio 用户,qmake 还可以生成 Visual Studio 工程文件。例如:
qmake -tp vc hello.pro
应用程序发行版未包含任何调试符号或其它调试信息。在开发期间,产生拥有相关信息的应用程序调试版本很有用。这可以轻松达成通过添加
debug
到
CONFIG
变量在工程文件。
例如:
CONFIG += debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp
如之前一样使用 qmake 生成 Makefile。现在将获得有关应用程序的有用信息当在调试环境下运行时。
经几小时编码,您可能已开始应用程序的特定平台部分,并决定单独从属平台代码。因此,现在有 2 个新文件要包括到工程文件中:
hellowin.cpp
and
hellounix.cpp
。无法仅仅将这些添加到
SOURCES
变量,由于那样会将 2 个文件都放在 Makefile 中。因此,在这里需要做的是使用作用域,将根据要为哪个平台构建进行处理。
添加 Windows 平台从属文件的简单作用域看起来像这样:
win32 { SOURCES += hellowin.cpp }
当为 Windows 构建时,qmake 添加
hellowin.cpp
到源文件列表。当为任何其它平台构建时,qmake 仅仅忽略它。现在剩下要做的就是为 Unix 特定文件创建作用域。
当这样做时,工程文件内容应该看起来像这样:
CONFIG += debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp win32 { SOURCES += hellowin.cpp } unix { SOURCES += hellounix.cpp }
如之前一样使用 qmake 生成 Makefile。
可能不想创建 Makefile,若某个文件不存在。可以校验文件是否存在,通过使用 exists() 函数。可以停止 qmake 的处理通过使用 error() 函数。这与作用域工作方式相同。只需采用函数替换作用域条件。校验称为 main.cpp 的文件看起来像这样:
!exists( main.cpp ) { error( "No main.cpp file found" ) }
!
符号用于否定测试。也就是说,
exists( main.cpp )
为 true 若文件存在,而
!exists( main.cpp )
为 true 若文件不存在。
CONFIG += 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 将停止处理。
假设使用 Windows,且想要能够看到语句输出采用
qDebug()
当在命令行运行应用程序时。要看到输出,必须采用适当控制台设置构建应用程序。可以很轻松地放置
console
在
CONFIG
行以在 Windows Makefile 中包括此设置。不管怎样,假设我们只想添加
CONFIG
行当在 Windows 运行
and
当
debug
已在
CONFIG
行。这要求使用 2 嵌套作用域。首先创建一个作用域,然后在其中创建另一个。将要处理的设置放入第 2 作用域,像这样:
win32 { debug { CONFIG += console } }
可以使用冒号将嵌套作用域拼接在一起,因此,最终工程文件看起来像这样:
CONFIG += 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 教程,并准备为开发工程编写工程文件。