目录
项目文件包含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中包含的现有值列表中。
常用变量
下表列出了一些常用变量并描述了它们的内容。 有关变量及其说明的完整列表,请参见变量。
变量名 | 含义 |
CONFIG | 常规项目配置选项 |
DESTDIR | 可执行文件或二进制文件所在的目录 |
FORMS | 用户界面编译器(uic)要处理的UI文件列表 |
HEADERS | 生成项目时使用的头文件(.h)的文件名列表 |
QT | 项目中使用的Qt模块列表 |
RESOURCES | 最终项目中将包括的资源(.qrc)文件列表。 有关这些文件的更多信息,请参见Qt资源系统 |
SOURCES | 生成项目时要使用的源代码文件列表 |
TEMPLATE | 用于项目的模板。 这确定了构建过程的输出是应用程序,库还是插件 |
读取变量值
变量的值可以通过在变量名前添加$$来读取。 这可用于将一个变量的内容赋值给另一个:
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(other.pro)
可通过作用域来提供对条件结构的支持,作用域的行为类似于编程语言中的if语句:
win32 {
SOURCES += paintwidget_win.cpp
}
仅当条件为真时,才进行大括号内的赋值。在这种情况下,必须设置win32 CONFIG选项。这在Windows上自动发生。
内置函数(例如find(),unique()和count())对通常需要循环的变量进行更复杂的操作。提供了这些功能以及许多其他功能来操纵字符串和路径,支持用户输入以及调用外部工具。有关使用功能的更多信息,请参见qmake语言。有关所有功能及其说明的列表,请参见替换功能和测试功能。
项目模板
TEMPLATE变量用于定义将要构建的项目的类型。如果未在项目文件中声明它,则qmake假定应构建一个应用程序,并将为此目的生成一个适当的Makefile(或等效文件)。
下表总结了可用的项目类型,并描述了qmake将为其生成的文件:
模板 | qmake输出 |
app (default) | 构建一个应用程序的Makefile |
lib | 构建一个库的Makefile |
aux | 不构建任何东西的Makefi。 如果不需要调用任何编译器来创建目标,请使用此选项,例如,因为您的项目是用解释语言编写的。注意:此模板类型仅适用于基于Makefile的生成器。 特别是,它不适用于vcxproj和Xcode生成器。 |
subdirs | Makefile包含使用SUBDIRS变量指定的子目录的规则。 每个子目录必须包含其自己的项目文件 |
vcapp | 构建应用程序的Visual Studio项目文件 |
vclib | 构建库的Visual Studio项目文件 |
vcsubdirs | 可在子目录中生成项目的Visual Studio解决方案文件 |
有关为使用app和lib模板的项目编写项目文件的建议,请参阅创建常见类型的项目。
使用subdirs模板时,qmake会生成一个Makefile来检查每个指定的子目录,处理在该目录中找到的任何项目文件,然后在新创建的Makefile上运行平台的make工具。 SUBDIRS变量用于包含所有要处理的子目录的列表。
常规配置
CONFIG变量指定应使用项目配置的选项和功能。
可以以发布模式或调试模式,或两者都构建项目。 如果同时指定了debug和release,则最后一个生效。 如果指定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.)
}
这样可以为发布和调试版本定义不同的配置。 有关更多信息,请参见使用范围。
以下选项定义了要构建的项目的类型。注意:其中某些选项仅在相关平台上使用时才生效。
选项 | 描述 |
qt | 该项目是需要链接到Qt库的Qt应用程序。 您可以使用QT变量来控制应用程序所需的任何其他Qt模块。 默认情况下会添加此值,但您可以将其删除以将qmake用于非Qt项目。 |
x11 | 该项目是X11应用程序或库。 如果目标使用Qt,则不需要此值。 |
应用程序和库项目模板为您提供了更专业的配置选项,以微调构建过程。 在构建常见类型项目中详细说明了这些选项。
例如,如果您的应用程序使用Qt库,并且您想在调试模式下构建它,则您的项目文件将包含以下行:
CONFIG += qt debug
注意:您必须使用“+=”,而不是“=”,否则qmake将无法使用Qt的配置来确定项目所需的设置。
声明Qt库
如果CONFIG变量包含qt值,则启用qmake对Qt应用程序的支持。 这样可以对应用程序使用哪个Qt模块进行微调。 这是通过QT变量实现的,该变量可用于声明所需的扩展模块。 例如,我们可以通过以下方式启用XML和网络模块:
QT += network xml
注意:默认情况下,QT包括core和gui模块,因此上述声明将network和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。
配置功能
可以使用功能(.prf)文件中指定的其他配置功能来设置qmake。 这些额外的功能通常为在构建过程中使用的自定义工具提供支持。 要将功能添加到构建过程中,请将功能名称(功能文件名的词干)附加到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