官方链接:https://doc.qt.io/qt-6/qmake-tutorial.html
本教程教您 qmake 的基础知识。本手册中的其他主题包含有关使用 qmake 的更多详细信息。
假设您刚刚完成了应用程序的基本实现,并且创建了以下文件:
您将在 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
应用程序的发布版本不包含任何调试符号或其他调试信息。在开发过程中,生成具有相关信息的应用程序的调试版本很有用。这很容易通过添加 debug 到项目文件中的 CONFIG 变量来实现。
例如:
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。
如果某个文件不存在,您可能不想创建 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() 输出的语句。要查看输出,您必须使用适当的控制台设置构建应用程序。我们可以很容易地将 console 加在 CONFIG 行上包含在 Windows 上的 Makefile 中。但是,假设我们只想在 Windows 上运行并且 debug 已经在 CONFIG 上时添加该 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 的教程,并准备为您的开发项目编写项目文件吧。