.pro文件
.pro文件包含了qmake构建应用程序、库或插件所需的所有信息。你可以使用一系列的声明去指定工程中的各种资源。
.pro文件组成元素
-
变量(Variables)
.pro文件中,变量用于存储字符串。它们通知qmake要使用的配置项,或者提供构建(build)过程中使用的文件名和路径。
qmake会在每个.pro文件中查找特定的变量,并使用这些变量来向Makefile写入什么。例如,HEADERS和SOURCES告诉qmake头文件和源码文件有哪些。SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h
下表是一些常用的变量:
变量名 | 作用 |
---|---|
CONFIG | 通用的项目配置项 |
DESTDIR | 可执行文件和二进制文件的目录 |
FORMS | ui文件列表 |
HEADERS | 头文件名列表 |
QT | 项目中用到的Qt模块列表 |
RESOURCES | 资源文件(.qrc)列表 |
SOURCES | 源码文件列表 |
TEMPLATE | 项目输出的类型(决定了构建过程的输出是应用程序、库还是插件) |
变量的内容可以通过在变量名前加"$$"来获取,这可以将一个变量的值给另一个变量。(该操作符用于对字符串和值列表进行操作)
TEMP_SOURCES = $$SOURCES
Note:若变量值中含有空格,则必须将值括在双引号中
DEST = "Program Files"
-
注释(Comments)
你可以向.pro文件添加注释。注释以#字符开始,并一直延续到同一行的末尾。例如:# The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings
Note:若变量赋值中包含#字符,需使用LITERAL_HASH标记变量的内容。例如:
# To include a literal hash character, use the $$LITERAL_HASH variable: urlPieces = http://doc.qt.io/qt-5/qtextdocument.html pageCount message($$join(urlPieces, $$LITERAL_HASH))
-
内置函数和控制流(Built-in Functions and Control Flow)
qmake提供了许多内置函数来处理变量的值。最常用的应该就是include()函数了,它以文件名作参数。指定的文件的内容将会包含在工程中。include(other.pro)
它也支持条件结构(条件结构是通过作用域提供的,作用域的行为类似编程语言中的if语句)
win32 { SOURCES += paintwidget_win.cpp }
大括号内的赋值仅在条件为真时执行。这种情况下,必须设置win32配置项(该项在windows上会自动生成)。左括号必须和条件在同一行上。
工程模板(Project Templates)
TEMPLATE 变量用于定义构建的工程类型。若工程文件中没有显示声明它,qmake默认构建一个应用程序,并生成一个适当的Makefile(或者其它的等效文件)。
下表描述了可用的工程类型,
模板名 | qmake输出类型 |
---|---|
app(默认) | 应用程序(application) |
lib | 库 |
aux | 什么都不做,如果不需要调用任何编译器来创建目标,则使用此方法,例如你的项目是用解释型语言编写的(注意:此模板类型仅适用于基于makefile的生成器。它不能与vcxproj和Xcode生成器一起工作) |
subdirs | Makefile包含使用SUBDIRS变量指定的子目录规则。每个子目录必须包含自己的工程文件 |
vcapp | vs应用程序 |
vclib | vs库 |
vcsubdirs | 在子目录中构建vs解决方案文件 |
当使用subdirs模板时,qmake生成一个Makefile来检查每个指定的子目录,处理其中找到的任何工程文件,并且在新创建的Makefile上运行平台make工具。SUBDIRS变量用于包含所有要处理的子目录列表。
常用配置项(General Configuration)
CONFIG变量指定了工程的配置项和特性。
工程可以在release或debug模式下构建。若同时指定了release和debug,则最后一个指定的会生效。如果指定debug_and_release选项来构建工程,那么qmake生成的Makefile包含两个版本的规则,它可以通过以下方式调用:
make all
将build_all项目加入CONFIG将使该规则成为构建工程时的默认规则。
注意:CONFIG变量中每个选项都可作为作用域条件。你可以使用CONFIG()函数测试该配置是否存在。例如,下面几行代码演示了CONFIG()函数用作作用域条件时,以测试是否存在opengl选项
CONFIG(opengl) {
message(Building with OpenGL support.)
} else {
message(OpenGL support is not available.)
}
这使得为不同环境不同模式提供不同配置成为可能。
下面选项定义要构建的项目类型。
注意:有些选项只在相关平台上使用才会生效。
配置项 | 描述 |
---|---|
qt | 该工程是一个Qt应用程序,应该链接到Qt库。你可以使用Qt变量来控制应用程序额外所需的Qt模块。默认情况下,这个值就是有的,不过你可以移除它来为非Qt工程使用qmake |
x11 | 工程指定为x11应用程序或库,如果目标文件是Qt则不需要此值 |
应用程序和库工程模板提供给你更转业的配置项去优化工程的构建过程。这些选项在构建通用工程类型中有详细说明。
例如若你的应用程序使用Qt库,并且你想要在debug模式中构建它,那么你的.pro可以这么写:
CONFIG += qt debug
添加Qt内部库(Declaring Qt Libraries)
若CONFIG变量包含qt值,则会启用qmake对qt应用程序的支持。这样就能让你的应用程序更好地使用Qt模块。例如,我们可以通过下面代码启用XML和网络模块:
QT += network xml
注意:Qt默认包含core模块和gui模块。所以上面的声明是用"+="将网络和XML模块添加到默认列表中,下面的代码省略了默认模块,编译时会发生错误:
QT = network xml # This will omit the core and gui modules.
若你想要从工程中移除一个模块,可以使用"-=",
QT -= gui # Only the core module is used.
添加配置特性(Configuration Features)
qmake可以在feature(.prf)文件中配置额外的特性。这些额外的特性通常为构建过程中使用的自定义工具提供支持。要在构建过程中添加功能,需要将功能部件名称添加到CONFIG变量中。
例如,qmake可以配置构建过程,以使用pkg-config支持的外部库,如D-Bus和ogg库:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
添加外部库(Declaring Other Libraries)
若你在工程中使用了外部库,你需要在.pro中指定它们。
qmake搜索库和指定链接库的路径需要添加到LIBS变量的值列表中。你可以指定库的路径,或者使用unix风格的符号来指定库和路径。
下面代码展示了如何指定库:
LIBS += -L/usr/local/lib -lmath
你还可以使用INCLUDEPATH变量来指定包含的头文件路径。
INCLUDEPATH = c:/msdev/include d:/stl/include
参考
- qmake-manual.html