QT qmake工具

0 简介

qmake工具提供了一个面向项目的系统,用于管理应用程序、库和其他组件的构建过程。qmake将每个项目文件中的信息扩展为一个Makefile,该Makefile执行编译和链接所需的命令。
项目由项目(.pro)文件的内容描述。qmake使用文件中的信息来生成包含构建每个项目所需的所有命令的makefile文件。然后使用make对代码进行构建,生成可执行文件。

1 内置变量及属性

变量:qmake的基本行为受到定义每个项目构建过程的变量声明的影响。其中一些声明资源,例如头文件和源文件,这些资源对于每个平台都是通用的。另一些则用于定制特定平台上编译器和链接器的行为。
属性:qmake有一个用于持久配置的系统,它允许您在Qmake中设置一次属性,并在每次调用Qmake时查询它。
主要变量/属性及含义:

编号变量/属性含义其他
1QT指定项目使用的Qt模块默认包含core和gui
2CONFIG指定项目配置和编译器选项“debug” 该项目将在调试模式下构建
3DEFINES将此变量的值添加为编译器C预处理器宏(-D选项)
4HEADERS定义项目的头文件Qmake自动检测头文件中的类是否需要moc,并将适当的依赖项和文件添加到项目中,以生成和链接moc文件
5SOURCES指定项目中所有源文件的名称
6INCLUDEPATH指定编译项目时应该搜索的#include目录对于包含来自第三方库或项目中其他目录的头文件非常有用
7DEPENDPATH指定要查找的所有目录的列表以解析依赖项虽然INCLUDEPATH也影响编译过程中的文件查找,但DEPENDPATH更侧重于构建系统对文件依赖关系的处理
8PWD指向包含正在解析的当前文件的目录的完整路径.pro的路径
9TARGET目标文件的名称默认情况下为项目文件的基本名称
10LIBS指定要链接到项目中的库列表-l(库)和-L(库路径)标志
11QMAKE_VERSIONqmake版本号此为“属性”

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.==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值