qmake 入门
本教程将向您介绍 qmake 的基础知识。本手册中的其他章节包含有关使用 qmake 的更详细信息。
简单入门
假设您刚刚完成了应用程序的基本实现,并创建了以下文件:
- hello.cpp
- hello.h
- main.cpp
你可以在 Qt 发行版的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 。
然后根据您使用的编译器,输入make 或nmake 。
对于 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.cpp 和hellounix.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 教程的学习,可以开始为您的开发项目编写项目文件了。
© 2026 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.