Qt QML 杂记

qmake 手册 002 简单入门

2020-05-07  本文已影响0人  赵者也

本节内容将向大家介绍 qmake 的一些基础知识。本手册中的其他主题将包含有关使用 qmake 的更详细内容。

简单起始

假设我们已经完成了应用程序的基本实现,并创建了下列文件:

hello.cpp
hello.h
main.cpp

我们可以在 Qt 发行版的 examples/qmake/tutorial 目录中找到这些文件。 关于应用程序的设置功能,我们所需知道的另一件事是它本身是用 Qt 编写的。首先,使用我们喜欢的纯文本编辑器,在 examples/qmake/tutorial 中创建一个名为 hello.pro 的文件。 我们需要做的第一件事是添加一些脚本,这些脚本将告诉 qmake 有关开发项目的源文件和头文件信息。

我们首先将源文件添加到项目文件中。 为此,我们需要使用 SOURCES 变量。我们可以新起一行,并使用 SOURCES += hello.cpp 的方式即可添加 hello.cpp 作为源文件。

SOURCES +=  hello.cpp

我们对项目中的每个源文件重复这个步骤:

SOURCES += hello.cpp
SOURCES += main.cpp

如果我们更喜欢使用 Make-like 的语法:把所有的文件都在一行中列出,我们可以像下面这样使用换行转义的方式:

SOURCES = hello.cpp \
          main.cpp

现在源文件已列在项目文件中,接下来我们添加头文件。头文件的添加方式与源文件完全相同,只是我们使用的变量名是 HEADERS。完成此操作后,我们的项目文件类似下面所示:

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

目标文件名称是自动设置的。它一般与项目文件名相同,并带有适合平台的后缀。例如,如果项目文件被称为 hello.pro,目标文件的名称在 Windows 平台上将是 hello.exe,而在 Unix 平台上将是 hello。如果我们想使用一个自定义的名字,我们可以在项目文件中,使用 TARGET 变量,并添加类似下面的脚本进行设置(建议将这个设置放在项目文件的起始处):

TARGET = helloworld

之后完成的项目文件类似下面这样:

TARGET = helloworld

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

现在可以使用 qmake 为这个应用程序生成 Makefile 文件了。启动命令行,并进入项目文件所在的目录中,然后键入以下内容:

qmake -o Makefile hello.pro

然后我们可以键入 make(或 nmake)来完成编译。

对于 Visual Studio 用户,qmake 也可以用来生成 Visual Studio 项目文件。 其命令如下:

qmake -tp vc hello.pro

使程序可调式

应用程序的发行版一般不需要包含任何调试符号或其他调试信息。但是在开发过程中,使用应用程序带有相关信息的调试版本非常有用。 通过将 debug 添加给项目文件中的 CONFIG 变量,可以轻松实现此目的。例如:

TARGET = helloworld

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

CONFIG += debug

我们还是像之前一样使用 qmake 来生成 Makefile。现在,在调试环境中运行应用程序时,我们将获得有关应用程序有用的调试信息。

添加平台相关的源文件

现在假设我们有两个新文件要包含到项目文件中:hellowin.cpp 和 hellounix.cpp。我们不能仅仅将它们添加到 SOURCES 变量中就完事了,因为这会将两个文件都放在 Makefile 中。 因此,我们在这里需要做的是使用一个作用域,它将根据我们为哪个平台构建而被进入并处理内部的脚本。

为 Windows 添加平台相关文件的简单作用域示例如下:

win32 {
    SOURCES += hellowin.cpp
}

在为 Windows 平台构建时,qmake 将 hellowin.cpp 添加到源文件列表中。在为任何其他平台构建时,qmake 都会忽略它。现在剩下的工作就是为特定于 unix 平台的文件创建一个作用域。

完成之后,我们的项目文件将类似下面这样:

TARGET = helloworld

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

CONFIG += debug

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 ) 为真。

TARGET = helloworld

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

CONFIG += debug

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 和已经在 CONFIG 变量上添加了 debug 时才添加 console 到 CONFIG 变量 。这时就需要使用两个相互嵌套的作用域。我们把要处理的设置放在第二个左右域内,像下面这样:

win32 {
    debug {
        CONFIG += console
    }
}

嵌套的作用域可以用冒号连接在一起,所以最终的项目文件会类似下面这样:

TARGET = helloworld

HEADERS = hello.h

SOURCES = hello.cpp \
          main.cpp

CONFIG += debug

win32 {
    SOURCES += hellowin.cpp
}
unix {
    SOURCES += hellounix.cpp
}

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

win32:debug {
    CONFIG += console
}

如大家所见,这还是挺容易的!现在,我们已经完成了qmake 的入门教程,并可以开始为开发项目编写项目文件了。

上一篇下一篇

猜你喜欢

热点阅读