qmake工具是与Qt一起提供的。它用于编译Qt本身,并且生成Qt自带的工具和例子。可以使用qmake工程文件(.pro文件)编译应用程序和插件。.pro文件的目的是列举工程包含的源文件。由于qmake用于编译Qt及其相关工具,所以它很熟悉Qt,并且能够生成一些触发moc、uic和rcc的规则。因此,qmake的语法很简明。
工程文件主要分为三种:app(独立的英语程序)、lib(静态和动态库)和subdirs(递归编译)。可以使用TEMPLATE变量指定工程文件的类型,如下:
TEMPLATE = lib
subdirs模板可以用来编译子目录里的目标文件。在这种情况下,除TEMPLATE = subdirs外,还需要指定SUBDIRS变量。在每个子目录中,qmake会搜寻以目录名命名的.pro文件,并且会编译该工程。
如果没有TEMPLATE这一项,那么默认工程是app。
一个.pro文件中的条目的语法通常有如下的形式:
variable = values
values是字符串的列表,注释以井号(#)开头,在行尾处结束。例如:
CONFIG = qt release warn_off #I know what I‘m doing
将列表[“qt”, “release”, “warn_off”]赋给CONFIG变量,它会覆盖以前的各个值。额外的操作符作为=操作符的补充。+=操作符可以用来扩展变量的值。例如:
CONFIG = qt
CONFIG += release
CONFIG += warn_off
这几行代码同样可以有效地把列表[“qt”, “release”, “warn_off”]赋值给CONFIG变量。-=操作符从当前的变量中移除所有出现的指定的值。例如:
CONFIG = qt release warn_off
CONFIG -= qt
会使CONFIG的值变成[“release”, “warn_off”]。*=操作在一个变量上添加一个值,但要求被添加的值不在变量的列表上否则,就什么都不做。
SOURCES *= main.cpp
将main.cpp实现文件添加到工程中,只有当还没有被添加的情况下才添加它。
=操作符可以使用指定的值替换符合正则表达式的值。例如:
SOURCES ~= s/\.cpp\b/.cxx/
使用.cxx替换SOURCES变量中所有的.cpp文件的扩展名。
如果有几个工程文件需要共享相同的项,则可以把相同的项提取到单独的文件中,在各自的.pro文件中使用include()语句包含它们。例如:
include(../common.pri)
HEADERS += window.h
SOURCES += main.cpp \
window.cpp
通常,打算被别的工程文件所包含的工程文件会带有.pri(工程包含)的扩展名。
qmake提供了访问其他qmake变量、环境变量和配置参数的方法。如下图:
我们可以设置任意变量的值,并且可以使用$
varName或者$
{varName}语法引用它。例如:
MY_VERSION = 1.2
TARGET = imgpro_$${MY_VERSION}