qmake 入门

本教程将介绍 qmake 的基础知识。本手册的其他主题包含有关使用 qmake 的更多详细信息。

从简单开始

假设你刚刚完成了应用程序的基本实现,并创建了以下文件:

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

您可以在 Qt XML 发行版的examples/qmake/tutorial 目录中找到这些文件。关于应用程序的设置,您唯一知道的就是它是用 Qt 编写的。首先,使用您最喜欢的纯文本编辑器,在examples/qmake/tutorial 中创建一个名为hello.pro 的文件。首先要做的是添加相关行,告诉 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 ,则在 Windows 平台上目标文件名为hello.exe ,在 Unix 平台上目标文件名为hello 。如果想使用不同的名称,可以在项目文件中进行设置:

TARGET = helloworld

完成后的项目文件应该是这样的

HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

现在可以使用 qmake 为应用程序生成 Makefile。在项目目录下的命令行中键入以下内容:

qmake -o Makefile hello.pro

注意: 如果你通过软件包管理器安装 Qt,二进制文件可能是qmake6

然后键入makenmake ,具体取决于您使用的编译器。

对于 Visual Studio 用户,qmake 还能生成 Visual Studio 项目文件。例如

qmake -tp vc hello.pro

使应用程序可调试

应用程序的发布版本不包含任何调试符号或其他调试信息。在开发过程中,生成一个包含相关信息的应用程序调试版本非常有用。在项目文件的CONFIG变量中添加debug 就能轻松实现这一目的。

例如

CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

像以前一样使用 qmake 生成 Makefile。现在,当您在调试环境中运行应用程序时,就能获得有关它的有用信息。

添加特定平台的源文件

经过几个小时的编码,你可能已经开始编写应用程序的特定平台部分,并决定将与平台相关的代码分开。因此,您现在需要在项目文件中加入两个新文件:hellowin.cpphellounix.cpp 。我们不能直接将这两个文件添加到SOURCES 变量中,因为这样会将两个文件都放到 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()函数来检查文件是否存在。我们可以使用error()函数停止 qmake 的处理。这与作用域的工作方式相同。只需用函数替换作用域条件即可。对名为 main.cpp 的文件的检查如下所示:

!exists( main.cpp ) {
    error( "No main.cpp file found" )
}

! 符号用于否定测试。也就是说,如果文件存在,exists( main.cpp ) 为真;如果文件不存在,!exists( main.cpp ) 为真。

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() 查看语句输出。要查看输出,必须在构建应用程序时设置适当的控制台。我们可以很容易地在CONFIG 行中加入console ,以便在 Windows 的 Makefile 中包含这一设置。不过,假设我们只想在 Windows 上运行时添加CONFIG,而且 debug 已在CONFIG 行上。这就需要使用两个嵌套作用域。首先创建一个作用域,然后在其内部创建另一个。将要处理的设置放在第二个作用域中,就像这样:

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 教程,可以为你的开发项目编写项目文件了。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.