qmake:项目文件

一、项目文件元素

qmake 使用的项目文件格式可用于支持简单到相当复杂的构建系统。简单的项目文件使用直接的声明类型,定义标准变量来指示项目中使用的源文件和头文件。复杂的项目可能会使用控制流结构来微调构建过程。

以下部分描述了项目文件中使用的不同类型的元素。

变量

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

qmake 在每个项目文件中查找某些变量,并使用这些变量的内容来确定应写入 Makefile 的内容。 

变量也可以在内部用于存储临时值列表,现有的值列表可以被新值覆盖或扩展。

以下代码段说明了如何将值列表分配给变量:

 HEADERS = mainwindow.h paintwidget.h

 赋值包括与 HEADERS 变量在同一行中指定的值。

变量中的值列表按以下方式扩展:

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

使用反斜杠 (\) 将 SOURCES 变量中的值跨行拆分。

在上面的代码片段中,console 被添加到 CONFIG 中包含的现有值列表中。

下面列出了一些常用的变量:

  • CONFIG:一般项目配置选项。
  • DESTDIR:将放置可执行文件或二进制文件的目录。
  • FORMS:要由用户界面编译器 (uic) 处理的 UI 文件列表。
  • HEADERS:构建项目时使用的头文件 (.h) 文件名列表。
  • QT:项目中使用的 Qt 模块列表。
  • RESOURCES:要包含在最终项目中的资源 (.qrc) 文件列表。
  • SOURCES:构建项目时要使用的源代码文件列表。
  • TEMPLATE:用于项目的模板。这决定了构建过程的输出是应用程序、库还是插件。

可以通过在变量名前加上 $$ 来读取变量的内容。这可用于将一个变量的内容分配给另一个:

 TEMP_SOURCES = $$SOURCES

$$ 运算符广泛用于对字符串和值列表进行操作的内置函数。

空格

通常,空格分隔变量赋值中的值。要指定包含空格的值,必须将值括在双引号中:

 DEST = "Program Files"

引用的文本被视为变量保存的值列表中的单个项目。类似的方法用于处理包含空格的路径,如在为 Windows 平台定义 INCLUDEPATH 和 LIBS 变量时:

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

注释

注释以 # 字符开始并一直到同一行的末尾。

内置函数和控制流程

qmake 提供了许多内置函数来处理变量的内容。简单项目文件中最常用的函数是 include() 函数,它将文件名作为参数。将给定文件的内容包含在项目文件中使用 include 函数的位置。include 函数最常用于包含其他项目文件:

 include(other.pro)

通过作用域类似于编程语言中的 if 语句,可以支持条件结构:

 win32 {
     SOURCES += paintwidget_win.cpp
 }

大括号内的赋值仅在条件为true时执行。开括号必须与条件站在同一行上。


二、工程模板

TEMPLATE 变量用于定义将要构建的项目类型。如果没有在项目文件中声明,qmake 默认构建一个应用程序。

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

  • app (默认):Makefile 构建应用程序。
  • lib:Makefile 构建一个库。
  • aux:Makefile 不构建任何内容。如果不需要调用编译器来创建目标,则使用此选项,例如,项目用解释性语言编写时。注意:此模板类型仅适用于基于 Makefile 的生成器。 特别是,它不适用于 vcxproj 和 Xcode 生成器。
  • subdirs:Makefile 包含使用 SUBDIRS 变量指定的子目录的规则。每个子目录必须包含自己的项目文件。
  • vcapp:Visual Studio 项目文件来构建应用程序。
  • vclib:Visual Studio 项目文件来构建库。
  • vcsubdirs:Visual Studio 解决方案文件以在子目录中构建项目。

三、一般配置

CONFIG 变量指定了项目应该配置的选项和功能。

项目可以在发布模式(release)或调试模式(debug )下构建,或两者兼而有之。如果同时指定了 debug 和 release,则最后一个生效。如果指定 debug_and_release 选项来构建项目的调试版本和发布版本,qmake 生成的 Makefile 将包含构建这两个版本的规则。这可以通过以下方式调用:

 make all

build_all 选项添加到 CONFIG 变量会使此规则成为构建项目时的默认规则

CONFIG 变量中指定的每个选项也可以用作范围条件。可以使用内置的 CONFIG() 函数测试某些配置选项的存在。这可以为发布和调试版本定义不同的配置。

例如,测试是否仅使用 opengl 选项:

 CONFIG(opengl) {
     message(使用 OpenGL 支持构建)
 } else {
     message(OpenGL 支持不可用)
 }

以下选项定义了要构建的项目类型:

  • qt:项目是一个 Qt 应用程序,应该链接到 Qt 库。 可以使用 QT 变量来控制应用程序所需的任何其他 Qt 模块。默认情况下添加此值,但可以将其删除以将 qmake 用于非 Qt 项目。
  • x11:项目是一个 X11 应用程序或库。 如果目标使用 Qt,则不需要此值。

例如,如果应用程序使用 Qt 库并且想在调试模式下构建它,项目文件将包含以下行:

 CONFIG += qt debug

注意:必须使用“+=”,而不是“=”。


四、声明 Qt 库

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

 QT += network xml

注意:QT 默认包含 core 和 gui 模块,所以上面的声明将 network 和 XML 模块添加到这个默认列表中。以下赋值省略了默认模块,并且在编译应用程序的源代码时会导致错误:

 QT = network xml #这将省略核心和 gui 模块

如果要构建没有 gui 模块的项目,则需要使用“-=”运算符将其排除。构建最小的 Qt 项目:

 QT -= gui #仅使用核心模块

五、配置特点

可以使用特性 (.prf) 文件中指定的额外配置特性来设置 qmake。 这些额外的功能通常为在构建过程中使用的自定义工具提供支持。

例如,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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值