本页内容

构建常见项目类型

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

本章不介绍平台相关的变量。如需了解更多信息,请参阅《Qt for Windows - 部署》和《Qt for macOS》。

构建应用程序

app 模板会指示qmake生成用于构建应用程序的Makefile。使用该模板时,可通过在CONFIG变量定义中添加以下选项之一来指定应用程序的类型:

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

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

  • HEADERS- 应用程序的头文件列表。
  • SOURCES- 应用程序的 C++ 源文件列表。
  • FORMS- 应用程序的 UI 文件列表(使用Qt Widgets 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 ,则所有其他定义都将被删除。

构建测试用例

测试用例项目是一种旨在作为自动化测试运行的app 项目。任何app 都可以通过将值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_test在运行make check 时,将忽略该测试的退出代码。

测试用例通常会采用QTest 或TestCase 编写,但并非必须使用CONFIG+=testcase 和make check 。唯一的主要要求是:测试程序在成功时以零退出代码退出,失败时以非零退出代码退出。

构建库

lib 模板会指示 qmake 生成一个用于构建库的 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 Widgets Designer 插件

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

QT          += widgets designer

有关基于插件的项目的更多示例,请参阅Qt Widgets Designer 示例。

在调试和发布模式下构建与安装

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

在两种模式下构建

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

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 ` 子句,以对发布模式实现相同的效果。若保持原样,目标名称将保持不变。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.