本页内容

创建项目文件

项目文件包含 qmake 构建您的应用程序、库或插件所需的所有信息。通常,您会通过一系列声明来指定项目中的资源,但对简单编程结构的支持使您能够针对不同的平台和环境描述不同的构建流程。

项目文件元素

qmake 使用的项目文件格式既可支持简单的构建系统,也能支持相当复杂的构建系统。简单的项目文件采用直观的声明式风格,通过定义标准变量来指定项目中使用的源文件和头文件。复杂的项目则可能使用控制流结构来精细调整构建过程。

以下各节将介绍项目文件中使用的不同类型元素。

变量

在项目文件中,变量用于存储字符串列表。在最简单的项目中,这些变量会告知 qmake 应使用的配置选项,或提供构建过程中所需的文件名和路径。

qmake 会在每个项目文件中查找特定的变量,并利用这些变量的内容来确定应将哪些内容写入 Makefile。例如,HEADERS和SOURCES变量中的值列表用于告知 qmake 项目文件所在目录下的头文件和源文件。

变量还可用于内部存储临时值列表,并且可以覆盖现有值列表或用新值扩展它们。

以下代码片段演示了如何将值列表赋给变量:

HEADERS = mainwindow.h paintwidget.h

变量的值列表可通过以下方式扩展:

SOURCES = main.cpp mainwindow.cpp \
          paintwidget.cpp
CONFIG += console

注意:第一次赋值 仅包含与HEADERS 变量位于同一行的值。第二次赋值则使用反斜杠(\)将SOURCES 变量中的值分行写入。

CONFIG变量是 qmake 在生成 Makefile 时使用的另一个特殊变量。相关内容将在“通用配置”中进行讨论。在上方的代码片段中,console 被添加到了CONFIG 中已有的值列表中。

下表列出了部分常用变量并描述了其内容。有关变量的完整列表及其说明,请参阅“变量”章节。

变量内容
CONFIG通用项目配置选项。
DESTDIR可执行文件或二进制文件将放置的目录。
FORMS将由User Interface Compiler(uic)处理的 UI 文件列表。
HEADERS构建项目时使用的头文件(.h)的文件名列表。
QT项目中使用的 Qt 模块列表。
资源将包含在最终项目中的资源(.qrc)文件列表。有关这些文件的更多信息,请参阅《Qt 资源系统》。
SOURCES构建项目时将使用的源代码文件列表。
模板项目所使用的模板。该模板决定构建过程的输出是应用程序、库还是插件。

通过在变量名前添加$$ ,可以读取变量的内容。这可用于将一个变量的内容赋值给另一个变量:

TEMP_SOURCES = $$SOURCES

$$ 运算符常与对字符串和值列表进行操作的内置函数配合使用。有关更多信息,请参阅qmake 语言。

空格

通常,变量赋值中的值之间用空格分隔。若要指定包含空格的值,必须将值用双引号括起来:

DEST = "Program Files"

带引号的文本将被视为该变量所包含的值列表中的单个项。处理包含空格的路径时也采用类似的方法,特别是在为 Windows 平台定义INCLUDEPATH和LIBS变量时:

win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"

注释

您可以在项目文件中添加注释。注释以# 字符开头,并延续至同一行的末尾。例如:

# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.

若要在变量赋值中包含# 字符,必须使用内置变量LITERAL_HASH的内容。

内置函数与控制流

qmake 提供了一系列内置函数,用于处理变量内容。在简单的项目文件中,最常用的函数是include()函数,它以文件名作为参数。 所指定文件的内容将被包含到项目文件中,位置即为使用include 函数之处。include 函数最常用于包含其他项目文件:

include(other.pro)

通过类似于编程语言中if 语句的行为范围,实现了对条件结构的支持:

win32 {
    SOURCES += paintwidget_win.cpp
}

只有当条件为真时,大括号内的赋值操作才会执行。此时,必须设置win32 CONFIG选项。在 Windows 系统上,此设置会自动生效。大括号的左括号必须与条件位于同一行。

对于通常需要使用循环才能实现的更复杂的变量操作,可通过内置函数(如find()、unique() 和count())来完成。这些函数以及许多其他函数可用于操作字符串和路径、支持用户输入以及调用外部工具。 有关使用这些函数的更多信息,请参阅qmake 语言。有关所有函数及其描述的列表,请参阅替换函数和测试函数。

项目模板

TEMPLATE变量用于定义要构建的项目类型。如果项目文件中未声明该变量,qmake 将默认构建应用程序,并为此生成相应的 Makefile(或等效文件)。

下表总结了可用的项目类型,并描述了 qmake 将为每种类型生成的文件:

模板qmake 输出
app(默认)用于构建应用程序的 Makefile。
lib用于构建库的 Makefile。
aux用于不构建任何内容的 Makefile。若创建目标无需调用编译器(例如,您的项目使用解释型语言编写),请使用此模板。

注意:此 模板类型仅适用于基于 Makefile 的生成器。特别是,它不适用于 vcxproj 和 Xcode 生成器。

subdirs包含针对通过SUBDIRS变量指定的子目录的规则的 Makefile。每个子目录必须包含其自身的项目文件。
vcapp用于构建应用程序的 Visual Studio 项目文件。
vclib用于构建库的 Visual Studio 项目文件。
vcsubdirs用于构建子目录中项目的 Visual Studio 解决方案文件。

有关为使用app 和lib 模板的项目编写项目文件的建议,请参阅“构建常见项目类型”。

当使用subdirs 模板时,qmake 会生成一个 Makefile,用于检查每个指定的子目录,处理其中找到的任何项目文件,并针对新创建的 Makefile 运行该平台的make 工具。SUBDIRS 变量用于存储所有待处理子目录的列表。

常规配置

CONFIG变量用于指定项目应采用的配置选项和功能。

项目可以在发布模式或调试模式下构建,也可以同时采用这两种模式。如果同时指定了调试和发布,则以最后指定的模式为准。如果您指定debug_and_release 选项来同时构建项目的调试版和发布版,qmake生成的Makefile中将包含一条用于构建这两个版本的规则。该规则可通过以下方式调用:

make all

将build_all 选项添加到CONFIG 变量中,可使该规则成为构建项目时的默认规则。

注意: CONFIG 变量中指定的每个 选项也可用作作用域条件。您可以使用内置的CONFIG()函数来检测特定配置选项是否存在。例如,以下几行代码展示了如何在作用域中将该函数用作条件,以测试是否仅使用了opengl 选项:

CONFIG(opengl) {
    message(Building with OpenGL support.)
} else {
    message(OpenGL support is not available.)
}

这使得可以为release 和debug 构建定义不同的配置。有关详细信息,请参阅《使用作用域》。

以下选项用于定义待构建的项目类型。

注意: 其中某些 选项仅在相关平台上使用时才生效。

选项描述
qt该项目是一个 Qt 应用程序,应与 Qt 库进行链接。您可以使用 `QT ` 变量来控制应用程序所需的任何其他 Qt 模块。该值默认会被添加,但您可以将其移除,以便将 qmake 用于非 Qt 项目。
x11该项目是一个 X11 应用程序或库。如果目标使用 Qt,则无需此值。

应用程序和库项目模板为您提供了更多专门的配置选项,用于微调构建过程。这些选项在《构建常见项目类型》中进行了详细说明。

例如,如果您的应用程序使用 Qt 库,并且您希望以debug 模式进行构建,则您的项目文件将包含以下行:

CONFIG += qt debug

注意: 必须使用“+=”,而非“=”,否则 qmake 将无法利用 Qt 的配置来确定项目所需的设置。

声明 Qt 库

如果CONFIG变量包含qt 值,则 qmake 对 Qt 应用程序的支持将被启用。这使得您可以精细调整应用程序使用的 Qt 模块。这是通过QT变量实现的,该变量可用于声明所需的扩展模块。 例如,我们可以按以下方式启用 XML 和网络模块:

QT += network xml

注意: QT 默认包含core 和gui 模块,因此上述声明是在此默认列表中添加了网络和XML模块。以下赋值省略了默认模块,这将在编译应用程序源代码时导致错误:

QT = network xml # This will omit the core and gui modules.

若要构建不包含 gui 模块的项目,需使用 “-=” 运算符将其排除。默认情况下,QT 包含core 和gui 两个模块,因此以下代码行将构建一个最简化的 Qt 项目:

QT -= gui # Only the core module is used.

有关可添加到QT 变量中的 Qt 模块列表,请参阅QT。

配置功能

qmake 可以通过在功能 (.prf) 文件中指定的额外配置功能进行设置。这些额外功能通常为构建过程中使用的自定义工具提供支持。要将某项功能添加到构建过程中,请将该功能名称(即功能文件名的词干)追加到CONFIG 变量中。

例如,qmake 可以通过以下几行代码配置构建过程,以利用pkg-config 支持的外部库(如 D-Bus 和 ogg 库):

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

有关添加功能的更多信息,请参阅《添加新配置功能》。

声明其他库

如果您在项目中除了使用 Qt 随附的库之外还使用了其他库,则需要在项目文件中指定它们。

qmake 搜索库的路径以及要链接的具体库,均可添加到LIBS变量的值列表中。您可以指定库的路径,或使用 Unix 风格的表示法来指定库和路径。

例如,以下几行代码展示了如何指定库:

LIBS += -L/usr/local/lib -lmath

包含头文件的路径也可以通过INCLUDEPATH变量以类似的方式指定。

例如,要添加多个用于搜索头文件的路径:

INCLUDEPATH = c:/msdev/include d:/stl/include

© 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.