二、qmake入门
这个教程教您qmake的基础知识。这份手册中的其他主题包含了关于使用qmake的更详细信息。
1 从简单开始
假设您刚完成了应用程序的基本实现,并且创建了以下文件:
- 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
注意:如果您通过包管理器安装Qt,二进制文件可能是qmake6。
然后根据您使用的编译器键入make或nmake。
对于Visual Studio用户,qmake还可以生成Visual Studio项目文件。例如:
qmake -tp vc hello.pro
2 使应用程序可调试
应用程序的发布版本不包含任何调试符号或其他调试信息。在开发过程中,生成带有相关信息的应用程序的调试版本是有用的。这可以通过在项目文件中的CONFIG变量中添加debug轻松实现。
例如:
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
像之前一样使用qmake生成Makefile。现在,在调试环境中运行应用程序时,您将获得有关应用程序的有用信息。
3 添加平台特定的源文件
经过几个小时的编码后,您可能已开始编写应用程序的平台特定部分,并决定将平台依赖的代码分开。因此,您现在有两个新文件要包含在您的项目文件中: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。
4 如果文件不存在则停止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将停止处理。
5 检查多个条件
假设您使用Windows,并且希望在命令行上运行应用程序时能够看到qDebug()的语句输出。要看到输出,您必须使用适当的控制台设置构建应用程序。我们可以轻松地将console放在CONFIG行上,以在Windows上将此设置包含在Makefile中。然而,假设我们只想在运行Windows且CONFIG行上已经有debug时添加CONFIG行。这需要使用两个嵌套的范围。首先创建一个范围,然后在其内部创建另一个。将要处理的设置放在第二个范围内,如下所示:
win32 {
debug {
CONFIG += console
}
}
嵌套范围可以使用冒号连接在一起,因此最终的项目文件看起来像这样:
就这样!您现在已经完成了qmake教程,并准备好为您的开发项目编写项目文件。
6 参考
Getting Started with qmake:https://doc.qt.io/qt-6/qmake-tutorial.html