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

然后根据您使用的编译器输入 makenmake

对于 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.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且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教程,并准备好为您的开发项目编写项目文件。

© 2024 The Qt Company Ltd。 本文档中所包含的贡献均为各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可协议1.3版本授权。Qt及相应标识是芬兰以及全球其他国家的The Qt Company Ltd的商标。所有其他商标均为各自所有者的财产。