qmake 快速入门

本教程将教授您 qmake 基础知识。本手册中的其它话题包含有关使用 qmake 的更多详细信息。

从简单开始

假定您已完成应用程序的基本实现,且有创建以下文件:

  • hello.cpp
  • hello.h
  • main.cpp

将找到这些文件在 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。

停止 qmake 若文件不存在

可能不想创建 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 教程,并准备为开发工程编写工程文件。