qmake文档真的不是很全,好多变量都不知道到哪里去找他们的用法,只能暂时copy源码中的部分来用,之后再慢慢学习。这里总结一下查找到资料的qmake知识。
- _DATE_ 当前日期和时间
- _FILE_ 当前qmake正在解析的文件(pri、pro文件等)
- QMAKE_HOST OS相关信息,
- QMAKE_HOST.arch 系统格式(x86或64)
- QMAKE_HOST.name 计算机在网络中的名称
- QMAKE_HOST.os 操作系统(Windows or linux)
- QMAKE_HOST.version 系统版本(Win95,WinXP…Win7获得的信息为14
比较有用的几个函数:
将路径中反斜杠( \ )转换成斜杠(/ ),
defineReplace(cleanPath) {
win32:1 ~= s|\\\\|/|g #用/替换掉\,正则表达式当中用四个反斜杠匹配反斜杠, 这里是Perl的正则表达式的用法,|g表示替换全部符合的模式
contains(1, ^/.*):pfx = / #前缀是/的,在最后要加上/
else:pfx =
segs = $$split(1, /)#根据/分开参数1
out =
#去除segs中..和.
for(seg, segs) {
equals(seg, ..):out = $$member(out, 0, -2) #文档中member函数是只有两个参数的,所以这个-2不清楚是做什么的
else:!equals(seg, .):out += $$seg
}
return($$join(out, /, $$pfx)) ##用/将列表链接起来,并用pfx作为结果的前缀
}
Debug与Release生成不同名字的文件
很多情况下我们需要根据当前build的mode来决定生成的文件名,比如,如果使用debug模式,就在生成文件后面加d。那么当载入这些文件的时候,我们还需要手动添加这样的话:
debug{
MYFILE = $${NAME}_d.dll
}
release{
MYFILE = $${NAME}.dll
}
每次用到都要写这个,那就来一个函数好了。在QtCreator中的实现是这样的:
defineReplace(qtLibraryName) {
unset(LIBRARY_NAME)
LIBRARY_NAME = $$1
CONFIG(debug, debug|release) {
!debug_and_release|build_pass {
mac:RET = $$member(LIBRARY_NAME, 0)_debug
else:win32:RET = $$member(LIBRARY_NAME, 0)d
}
}
isEmpty(RET):RET = $$LIBRARY_NAME
return($$RET)
}