0 简介
qmake工具提供了一个面向项目的系统,用于管理应用程序、库和其他组件的构建过程。qmake将每个项目文件中的信息扩展为一个Makefile,该Makefile执行编译和链接所需的命令。
项目由项目(.pro)文件的内容描述。qmake使用文件中的信息来生成包含构建每个项目所需的所有命令的makefile文件。然后使用make对代码进行构建,生成可执行文件。
1 内置变量及属性
变量:qmake的基本行为受到定义每个项目构建过程的变量声明的影响。其中一些声明资源,例如头文件和源文件,这些资源对于每个平台都是通用的。另一些则用于定制特定平台上编译器和链接器的行为。
属性:qmake有一个用于持久配置的系统,它允许您在Qmake中设置一次属性,并在每次调用Qmake时查询它。
主要变量/属性及含义:
编号 | 变量/属性 | 含义 | 其他 |
---|---|---|---|
1 | QT | 指定项目使用的Qt模块 | 默认包含core和gui |
2 | CONFIG | 指定项目配置和编译器选项 | “debug” 该项目将在调试模式下构建 |
3 | DEFINES | 将此变量的值添加为编译器C预处理器宏(-D选项) | |
4 | HEADERS | 定义项目的头文件 | Qmake自动检测头文件中的类是否需要moc,并将适当的依赖项和文件添加到项目中,以生成和链接moc文件 |
5 | SOURCES | 指定项目中所有源文件的名称 | |
6 | INCLUDEPATH | 指定编译项目时应该搜索的#include目录 | 对于包含来自第三方库或项目中其他目录的头文件非常有用 |
7 | DEPENDPATH | 指定要查找的所有目录的列表以解析依赖项 | 虽然INCLUDEPATH也影响编译过程中的文件查找,但DEPENDPATH更侧重于构建系统对文件依赖关系的处理 |
8 | PWD | 指向包含正在解析的当前文件的目录的完整路径 | .pro的路径 |
9 | TARGET | 目标文件的名称 | 默认情况下为项目文件的基本名称 |
10 | LIBS | 指定要链接到项目中的库列表 | -l(库)和-L(库路径)标志 |
11 | QMAKE_VERSION | qmake版本号 | 此为“属性” |
2 操作符
qmake除了name = value和name += value定义,简单地描述项目使用的源文件和头文件。qmake还提供了其他操作符、函数和作用域,可用于处理变量声明中提供的信息。
“*=”操作符将一个值添加到变量的值列表中,但仅当该值不存在时才会添加。这可以防止在一个变量中多次包含值。
DEFINES *= USE_MY_STUFF
“~=”操作符用指定的值替换与正则表达式匹配的任何值,列表中以QT_D或QT_T开头的任何值都被QT替换
DEFINES ~= s/QT_[DT].+/QT
“$$”操作符用于提取变量的内容,并可用于在变量之间传递值或将值提供给函数
EVERYTHING = $$SOURCES $$HEADERS
message("The project contains the following files:")
message($$EVERYTHING)
“$$(…)"操作符获取变量的内容
DESTDIR = $$(PWD)
message(The project will be installed in $$DESTDIR)
$(…)操作符要在生成的Makefile被处理时获取环境值的内容。在处理项目文件时立即读取PWD的值,但是在生成的Makefile中将$(PWD)赋值给DESTDIR。
DESTDIR = $$(PWD)
message(The project will be installed in $$DESTDIR)
DESTDIR = $(PWD)
message(The project will be installed in the value of PWD)
message(when the Makefile is processed.)
$$[…]操作符可以用来访问qmake属性
message(Qt version: $$[QT_VERSION])
实例:
*.pro文件中有如下内容:
message("==test begin:==")
message("QT: $$QT")
message("CONFIG: $$CONFIG")
message("DEFINES: $$DEFINES")
message("-*.cpp *.h-")
message("HEADERS: $$HEADERS")
message("SOURCES: $$SOURCES")
message("INCLUDEPATH: $$INCLUDEPATH")
message("DEPENDPATH: $$DEPENDPATH")
message("-path-")
message("PWD: $$PWD")
message("-other-")
message("TARGET: $$TARGET")
message("LIBS: $$LIBS")
message("QMAKE_VERSION: $$[QMAKE_VERSION]")
message("==test end.==")
编译生成:
Project MESSAGE: ==test begin:==
Project MESSAGE: QT: core gui network xml concurrent
Project MESSAGE: CONFIG: lex yacc debug exceptions
Project MESSAGE: -*.cpp *.h-
Project MESSAGE: HEADERS: LogService.h
Project MESSAGE: SOURCES: main.cpp
Project MESSAGE: INCLUDEPATH: /home/csg123456/work/branches/
Project MESSAGE: DEPENDPATH: /home/csg123456/work/branches/TEST/Util
Project MESSAGE: -path-
Project MESSAGE: PWD: /home/csg123456/work/branches/TEST
Project MESSAGE: -other-
Project MESSAGE: TARGET: TEST
Project MESSAGE: LIBS: -lzmqpp
Project MESSAGE: QMAKE_VERSION: 3.1
Project MESSAGE: ==test end.==