创建项目文件
项目文件包含 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 时使用的特殊变量。它在通用配置中讨论。在上面的代码片段中,向 CONFIG
中现有值的列表中添加了 console
。
以下表格列出了一些常用变量及其内容。有关变量和其描述的完整列表,请参阅变量。
变量 | 内容 |
---|---|
CONFIG | 通用项目配置选项。 |
DESTDIR | 可执行文件或二进制文件将被放置的目录。 |
FORMS | 要由用户界面编译器(uic)处理的 UI 文件列表。 |
HEADERS | 在构建项目时使用头部 (.h) 文件的名列表。 |
QT | 项目中使用的 Qt 模块列表。 |
RESOURCES | 这是一份要在最终项目中包含的资源文件(.qrc)列表。有关这些文件更多信息,请参阅Qt 资源系统。 |
源代码 | 当构建项目时,将使用以下源代码文件列表。 |
模板 | 用于项目的模板。这决定了构建过程输出的结果是应用程序、库还是插件。 |
可以通过在变量名前添加$$
来读取变量的内容。这可以用来将一个变量的内容赋给另一个变量。
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
语句的scopes
来提供对条件结构的支持。
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
© 2024 The Qt Company Ltd. 本文档中的文档贡献均为其相应所有者的版权。提供的文档依据免费软件基金会发布并由《GNU自由文档许可协议》第1.3版许可条款提供。