qmake language 变量
qmake language $() $$() $$[] $${} 区别(属性property、变量variable、环境变量evironment variable)_丘上人的博客-CSDN博客
qmake language 内建关键字
qmake language variable true false test function host_build_丘上人的博客-CSDN博客
qmake language函数
qmake language 内置函数 自定义函数 defineTest(testfunctionname) defineReplace(repacefunctionname)_丘上人的博客-CSDN博客
全局变量作用范围
全局变量作用范围为从声明开始到整个工程解析结束,export(variable)出的全局变量variable作用范围从第一次调用函数开始。如下,第一次调用ttfun开始。
message($$tt1)
message($$tt2)
message($$tt3)
tt1=dae
defineTest(mytt){
message($$tt1)
message($$tt2)
message($$tt3)
}
tt2=ge
mytt()
tt3=eee
message($$tt1)
message($$tt2)
message($$tt3)
#输出:
#Project MESSAGE:
#Project MESSAGE:
#Project MESSAGE:
#Project MESSAGE: dae
#Project MESSAGE: ge
#Project MESSAGE:
#Project MESSAGE: dae
#Project MESSAGE: ge
#Project MESSAGE: eee
defineTest(ttfun){
myvar.aa.cc=12345
myvar.aa.bb=$${LITERAL_HASH}define TT 12345 #$${LITERAL_HASH}表示qmake language中输出#号
export(myvar.aa.bb)
}
message($$myvar.aa.bb) #输出为空
ttfun()
message($$myvar.aa.cc) #输出空,全局环境中没有名字为myvar.aa.cc的变量
message($$myvar.aa.bb) #输出#define TT 12345,全局环境中有名字为myvar.aa.bb的变量且有值
词法
string
1、#
$${LITERAL_HASH}在qmake string中表示'#'字符
message($${LITERAL_HASH}ifdef TESTCODE)
#输出
#Project MESSAGE:#ifdef TESTCODE $${LITERAL_HASH}表示“#”字符
2、转义字符
qmake language对string中的字符转义是在词法分析阶段,转义字符包括:
//qmake QMakeParse.read中词法分析对转义操作的代码部分
else if (c == '\\') {
static const char symbols[] = "[]{}()$\\'\"";
ushort c2;
if (cur != end && !((c2 = *cur) & 0xff00) && strchr(symbols, c2)) {
c = c2;
cur++;
} else {
deprecationWarning(fL1S("Unescaped backslashes are deprecated"));
}
}
词法分析阶段不会对(\n,\t,\r)转义。如果要对(\n,\t,\r)转移,也就是获取到('\n','\r','\t'),需要用escape_expand(string)这个replace函数进行操作。('\n':换行,移动到下行;'\r':回车换行,移动到下行行首,移动到行首;'\t':tab键)
message(\[ \] \{ \} \( \) \$ \\ \' \" aa\nbb\rcc\tdd)
message($$escape_expand(\[ \] \{ \} \( \) \$ \\ \' \" aa\nbb\rcc\tdd)) #字符串“\[ \] \{ \} \( \) \$ \\ \' \" aa\nbb\rcc\tdd”在词法分析阶段就被处理成:“[ ] { } ( ) $ \ ' " aa\nbb\rcc\tdd”。escape_expand再对\n \r \t 进行转移处理。
输出:
另外在词法处理时还会兼顾行延续功能:
var = aaaa \
bbbb
message($$var) #输出Project MESSAGE: aaaa bbbb
转义字符在qmake language中不作为分隔符号,参看如下代码:
var=aaa bbb
message($$size(var))
var= aaa$$escape_expand(\n)bbb
message($$size(var))
var = aaa$$escape_expand(\t)bbb
message($$size(var))
var = aaa$$escape_expand(\r)bbb
message($$size(var))
#输出:
Project MESSAGE: 2
Project MESSAGE: 1
Project MESSAGE: 1
Project MESSAGE: 1