qmake——创建项目文件

来源:互联网 发布:js表格focus 编辑:程序博客网 时间:2024/05/27 00:46

创建项目文件

项目文件包含了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”是另一个特殊的变量。在“通用配置”一节中将具体讨论。在上面的代码片段,
console被添加到CONFIG已经存在的值列表里。
下面的表格列出了一些常用的变量和他们内容的描述。想查看全部变量请查看“变量”一章。

变量 内容 CONFIG 通用项目设置选项 DESTDIR 生成的文件的放置路径 FORMS 用户界面编译器(uic)处理的UI文件列表。 HEADERS 构建项目时需要的头文件列表 QT 项目中使用的QT模块 RESOURCES 资源文件列表 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函数通常被用来包含其他项目文件:

  include(other.pro)

对于选择结构的支持使得域能够像编程语言中的if语句一样工作:

  win32 {      SOURCES += paintwidget_win.cpp  }

只有在条件为真时花括号中的语句才会起作用。在这种情况下,win32设置选项一定要被
设置。在Windows环境下它会自动设置,左边的大括号必须和条件在同一行。
针对变量的更复杂的操作通常需要循环结构,这些操作一些内建函数实现,比如find(),
unique()和count().这些函数提供了对于字符串和路径的操作,支持用户输入,
还可以调用外部工具。获取更多有关如何使用函数的信息,请查看“qmake语言”
想要查看全部函数列表和他们的描述,可以查看“替换函数”和“测试函数”

项目模板

变量“TEMPLATE”被用来定义将要构建的项目的类型。如果它没有在项目文件中定义,
qmake会假定构建一个应用程序,并且会生成一个合适的makefile(或等价文件)

下面的表格总结了可用的项目类型,并且描述了qmake将生成的文件。

模板 qmake输出 app makefile生成一个应用程序 lib makefile生成一个库 aux makefile将什么也不生成,在没有编译器需要被调用来创建目标的情况下使用它,比如你使用的是解释型语言。注意:这个模板只能用于基于makefile的生成器。 subdirs Makefile规则包含使用SUBDIRS变量指定的子文件。每一个子目录必须包含它自己的项目文件。 vcapp Visual Studio项目文件 生成一个应用程序 vclib Visual Studio项目文件生成一个库 vcsubdirs Visual Studio解决方案文件要在子目录生成项目

查看“构建通用项目类型”一节以获得使用app和lib模板的项目文件的编写建议
当使用subdirs模板时,qmake会生成一个makefile来检查每一个指定的子目录,
处理在子目录中找到的所有项目文件,然后运行当前平台的make工具处理新
生成的makefile,变量”SUBDIRS“被用来容纳子目录列表。

通用设置

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

项目可以以debug模式或release模式构建,两种一起构建也可以,如果debug和release
同时被指定,最后一个会生效。如果你指定了debug_and_release选项来同时构建
两个版本,qmake生成的makefile会包含一个可以构建两个版本的规则,可以用如下方式调用:


make all

向变量“CONFIG”中添加build_all选项可以将all规则设为默认规则。
注意:在CONFIG变量中指定的每一个选项都可以被用做一个域的条件。你可以通过
使用内建的CONFIG()函数来检测某些的配置选项是否存在,比如说,下面这几行代码
展示了该函数做为域的条件时测试是否只有opengl选项被使用:

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

这允许针对release和debug定义不同的配置选项。查看“使用域”获得更多信息

下列选项定义了将要构建的项目类型。
注意这些选项中的一些只会在相关平台上起作用

选项 描述 qt 这是一个qt应用项目,并且依赖于qt库。你可以使用变量“QT”来控制你的应用中所需要的QT模块。这个值会默认添加,可以用CONFIG -= qt来构建非QT应用 x11 这是一个X11应用或库,如果目标使用了qt,这个值是不需要的。

应用程序和库项目模板为你提供了更专业的配置选项用来调整生成过程。
选项更详细的解释在Building Common Project Types

举个例子,如果你的应用使用了qt库并且你想以debug模式构建它,你的项目文件中
应当包含下面这行:

  CONFIG += qt debug

注意:你必须使用“+=”,而不是“=”,否则qmake将无法使用qt的配置
来判断你的项目所需要的设置。

Qt库的声明

如果变量“CONFIG”包含值qt,针对qt应用的qmake支持将会开启。这样就
可以微调你的应用程序使用的Qt模块。这个功能需要与变量QT配合使用,
变量QT被用来声明所需的额外的模块。比如我们可以使用下面的方法来使用
XML和network模块
QT += network xml
注意:变量QT默认包含core与gui模块。下面的语句会忽略默认模块,
导致编译错误:

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

如果你想构建一个不含gui模块的项目,你需要使用“-=”来排除它,应为QT默认包含
core和gui,所以下面这行将会构建一个最小的qt项目:

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

配置特性

qmake可以设置额外的配置特性,这需要在特性文mingc件(.prf)中指定。这些额外的
特性通常会提供对定制工具的支持。想要在构建过程中添加一个特性,需要在
变量“CONFIG”后附加特性的名称(特性文件名的词干)。
例如,qmake可以利用pkg-config支持的三方库来构建应用,比如说D-Dus和ogg库。
下面的代码可以实现该功能:

  CONFIG += link_pkgconfig  PKGCONFIG += ogg dbus-1

声明第三方库

如果你使用了第三方库,你需要在你的项目文件中指定它。
qmake搜索库的路径和依赖的特定库可以被添加到变量“LIBS”中,你可以指定库的路径
或使用Unix风格的记法来指定库和路径。
下面这行展示了如何指定一个库:

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

包含头文件的路径也可以使用相同的方式添加到 INCLUDEPATH 变量

例如,添加几个用于查找头文件的路径

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

原创粉丝点击