帮助文档
查看帮助文档直接在.pro
文件下按F1,或官方网站说明
构成元素
变量Variables:用于维护一个字符串列表,qmake依此配置相应信息比如
HEADERS
,SOURCES
,LIBS
,DEFINES
,所有的变量请看帮助文档,空格用于分隔字符串,如果字符串中包涵空格需要用双引号,eg:DEST = "Program Files"
Variable Contents CONFIG General project configuration options.注意如果是同一配置项的不同选择,以最后一个指定为最终选eg:CONFIG = debug,CONFIG += release,以release编译。 DESTDIR The directory in which the executable or binary file will be placed. FORMS A list of UI files to be processed by the user interface compiler (uic). HEADERS 工程build中使用到的头文件列表 QT 工程中使用到的qt模块列表,也可以理解就是使用了哪些qt库。 LIBS 第三方库列表。用来添加除了qt库之外的库。eg: LIBS += -L/usr/local/lib -lmath
-L路径(可以用INCLUDEPATH来指定),-l库名RESOURCES 工程build中使用到的.qrc资源文件列表 SOURCES 工程build中使用到的源文件列表 TEMPLATE 指定编译输出的是app还是dll,或者plugin.这里提供的有app,lib,aux,subdirs,vcapp,vclib,vcsubdirs 备注Comments
用#
号注释。函数和控制流程
- Built-in Functions:具体的函数看可查看
Replace Functions
和Test Functions
.使用请参看qmake Language
中的相应部分。 - Control Flow
- Built-in Functions:具体的函数看可查看
一些语法规则
操作符(operators)
- = : 赋值
- -= :移除
- += :附加
- *= :附加唯一值(即只有变量表中不存在该值才添加)
~= :替换
DEFINES ~= s/QT_[DT].+/QT
DEFINES
中任何以QT_D
或者QT_T
开始的字符都被替换为QT
$$ :提取变量内容。
EVERYTHING = $$SOURCES $$HEADERS message("The project contains the following files:") message($$EVERYTHING)
执行范围(scopes)
像if的语句块一样,当条件成立就执行scope里面的语句。注意
{
必须与条件在同一行。<condition> { <command or definition> ... }
条件可以使用
{}
嵌套,也可以使用:
省去书写{}的麻烦,单条执行可直接使用:
。如下:macx { CONFIG(debug, debug|release) { HEADERS += debugging.h } } macx:CONFIG(debug, debug|release) { HEADERS += debugging.h } win32:DEFINES += USE_MY_STUFF
上面中的
:
相当于AND条件,如果要实现或条件可以使用|
win32|macx { HEADERS += debugging.h }
CONFIG
表中中定义的变量,都可以直接拿来当做scopes语句的条件。eg:``` CONFIG += opengl opengl { TARGET = application-gl } else { TARGET = application } ```
平台相关的条件变量有
win32
,macx
, 和unix
,以及Qt's mkspecs
目录下提供的各平台目录也可以当成scopes的条件变量来判断比如message($$QMAKESPEC) linux-g++ { message(Linux) }
提供的一些函数
include()
include(other.pro)
信息输出
message()
,error()
,后者会中止继续执行qmake文件是否存在函数
exists()
!exists( main.cpp ) { error( "No main.cpp file found" ) #执行完后退出 }
- 变量是否有value值判断
contains(variablename, value)
- 变量个数判断
count(variablename, number)
- 测试函数或变量名是否定义,与DEFINES无关
defined(name[, type])
CONFIG(config)
这个还可以当函数使用。测试变量表CONFIG中是否有某个变量
不同编译器下的条件判断
DEFINES += VBCALL
message($$QMAKESPEC)
win32-g++{
QMAKE_LFLAGS = -static-libgcc -static-libstdc++ #anzyelay add
contains(DEFINES,VBCALL){
QMAKE_LFLAGS += -Wl,--subsystem,windows,--kill-at #VB must add
message("add vb option")
}
message("g++ mingw")
}
win32-msvc2015{
contains(QMAKESPEC,D:/Qt/Qt5.8.0_x86/5.8/msvc2015/mkspecs/win32-msvc2015):{
message("x86 msvc2015")
LIBS += -L$$PWD/'../../../Program Files (x86)/Microsoft Visual Studio 8/VC/PlatformSDK/Lib/' -lUser32
INCLUDEPATH += $$PWD/'../../../Program Files (x86)/Microsoft Visual Studio 8/VC/PlatformSDK/Lib'
DEPENDPATH += $$PWD/'../../../Program Files (x86)/Microsoft Visual Studio 8/VC/PlatformSDK/Lib'
}
else{
LIBS += -L'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64/' -lUser32
INCLUDEPATH += 'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64'
DEPENDPATH += 'C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64'
message("msvc2015 64")
}
}