构建常用项目类型

本章介绍了如何为基于 Qt 的三种常用项目类型(应用程序、库和插件)设置 qmake 项目文件。虽然所有项目类型都使用许多相同的变量,但它们各自使用特定于项目的变量来定制输出文件。

不在此处描述特定于平台的变量。有关更多信息,请参阅 Qt for Windows - DeploymentQt for macOS

构建应用程序

app 模板告诉 qmake 生成一个 Makefile,该 Makefile 将构建一个应用程序。使用此模板,可以通过向 CONFIG 变量定义中添加以下选项之一来指定应用程序的类型

选项描述
windows该应用程序是一个 Windows 图形用户界面应用程序。
consoleapp 模板仅限:该应用程序是一个 Windows 控制台应用程序。
testcase该应用程序是一个 自动化测试

使用此模板时,以下 qmake 系统变量被识别。您应在您的 .pro 文件中使用这些变量来指定有关应用程序的信息。有关其他与平台相关的系统变量,可以查看 平台说明

  • HEADERS - 应用程序的头文件列表。
  • SOURCES - 应用程序的 C++ 源文件列表。
  • FORMS - 应用程序的 UI 文件列表(使用 Qt Designer 创建)。
  • LEXSOURCES - 应用程序的 Lex 源文件列表。
  • YACCSOURCES - 应用程序的 Yacc 源文件列表。
  • TARGET - 应用程序的执行文件名称。默认为项目文件名称。(如果有的话,将自动添加扩展名)。
  • DESTDIR - 目标可执行文件放置的目录。
  • DEFINES - 任何额外的预处理定义,用于应用程序。
  • INCLUDEPATH - 任何额外的包含路径,用于应用程序。
  • DEPENDPATH - 应用程序的依赖搜索路径。
  • VPATH - 查找提供文件的搜索路径。
  • DEF_FILE - Windows 仅:用于链接应用程序的 .def 文件。

您只需要使用有值的系统变量。例如,如果您没有额外的 INCLUDEPATH,则不需要指定任何内容。qmake 将添加必要的基本值。一个示例项目文件可能如下所示

TEMPLATE = app
DESTDIR  = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += USE_MY_STUFF
CONFIG  += release

对于单值项目,例如模板或目标目录,我们使用“=”;但对于多值项目,我们使用“+=”来添加到该类型现有项目。使用“=”会替换变量值为新值。例如,如果我们编写DEFINES=USE_MY_STUFF,则删除所有其他定义。

构建测试用例

测试用例项目是一种项目,计划作为自动化测试运行。任何都可以通过将值testcase添加到CONFIG变量来标记为测试用例。

对于测试用例项目,qmake将在生成的Makefile中插入一个check目标。此目标将运行应用程序。如果测试以退出代码等于零的方式终止,则认为测试通过。

check目标会自动递归遍历SUBDIRS项目。这意味着可以在SUBDIRS项目内部运行整个测试套件的make check命令。

check目标的执行可以通过某些Makefile变量进行自定义。这些变量是

变量描述
TESTRUNNER在每次测试命令之前追加的命令或shell片段。一个示例用法是“超时”脚本,该脚本将在指定的超时时间内测试未完成时终止测试。
TESTARGS附加到每次测试命令的额外参数。例如,传递额外的参数来设置测试的输出文件和格式可能很有用(例如,QTestLib支持的-o filename,format选项)。

注意:必须在调用make工具时设置这些变量,而不是在.pro文件中。大多数make工具都支持在命令行上直接设置Makefile变量。

# Run tests through test-wrapper and use JUnit XML output format.
# In this example, test-wrapper is a fictional wrapper script which terminates
# a test if it does not complete within the amount of seconds set by "--timeout".
# The "-o result.xml,junitxml" options are interpreted by QTestLib.
make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,junitxml"

测试用例项目可以通过以下CONFIG选项进一步自定义

选项描述
insignificant_testmake check期间将忽略测试的退出代码。

测试用例通常使用QTestTestCase编写,但使用CONFIG+=testcasemake check并非强制性要求。唯一的主要要求是测试程序在成功时以零退出代码退出,在失败时以非零退出代码退出。

构建库

lib”模板告诉qmake生成一个Makefile,该Makefile将构建库。使用此模板时,除了app模板支持的系统变量之外,还支持VERSION变量。使用您的.pro文件中的变量来指定有关库的信息。

使用“lib”模板时,可以将以下选项添加到CONFIG变量中,以确定构建的库类型

选项描述
dll该库是共享库(dll)。
staticlib该库是静态库。
plugin该库是插件。

还可以定义以下选项来提供有关库的附加信息。

  • VERSION - 目标库的版本号。例如,2.3.1。

库的目标文件名依赖于平台。例如,在X11、macOS和iOS上,库的名称将前面有“lib”。在Windows上,不添加前缀。

构建插件

插件是使用之前章节中描述的 lib 模板构建的。这告诉 qmake 为项目生成一个 Makefile,该 Makefile 将以适合每个平台的形式构建插件,通常是以库的形式。与普通库一样,使用 VERSION 变量来指定插件的信息。

  • VERSION - 目标库的版本号。例如,2.3.1。

构建 Qt Designer 插件

Qt Designer 插件是使用特定的一组配置设置构建的,这些设置取决于 Qt 在您的系统中的配置方式。为了方便,可以通过将 designer 添加到 QT 变量来启用这些设置。例如

QT          += widgets designer

请参阅 Qt Designer 示例 了解基于插件的项目的更多示例。

以调试和发布模式构建和安装

有时,需要以调试和发布模式构建项目。尽管 CONFIG 变量可以同时包含 debugrelease 选项,但只有最后指定的选项会被应用。

同时构建两种模式

要使项目能够在两种模式下构建,必须在 CONFIG 变量中添加 debug_and_release 选项

CONFIG += debug_and_release

CONFIG(debug, debug|release) {
    TARGET = debug_binary
} else {
    TARGET = release_binary
}

上述片段的作用域修改了每种模式下的构建目标,以确保生成的目标具有不同的名称。为不同的目标提供不同的名称可以确保一个不会覆盖另一个。

当 qmake 处理项目文件时,它将生成一个 Makefile 规则,允许项目以两种模式构建。可以通过以下方式调用它

make all

可以在项目文件中为 CONFIG 变量添加 build_all 选项,以确保项目以默认方式在两种模式下构建

CONFIG += build_all

这允许使用默认规则处理 Makefile

make

以两种模式安装

在调用安装规则时,build_all 选项还确保会安装目标的所有版本

make install

可以根据目标平台自定义构建目标的名称。例如,Windows 上的库或插件可能使用与 Unix 平台不同的命名约定

CONFIG(debug, debug|release) {
    mac: TARGET = $$join(TARGET,,,_debug)
    win32: TARGET = $$join(TARGET,,d)
}

上述片段中的默认行为是在调试模式构建时修改用于构建目标的名称。可以添加一个 else 子句以同样方式对发布模式执行。如果不修改,则目标名称保持不变。

© 2024 Qt 公司有限公司。本文件中包含的文档贡献的版权归其各自的所有者。本文件中提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款许可的。Qt 及其各自标志是芬兰的 Qt 公司及其全球其他国家的注册商标。所有其他商标均为其各自所有者的财产。