qmake language defined(name[, type])函数

编程入门 行业动态 更新时间:2024-10-23 03:30:14

qmake language defined(name[, type])<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数"/>

qmake language defined(name[, type])函数

defined(name[, type])是qmake中的Build-in test function,其意义是用于判断name是否已经被定义了,可以判断qmake中的变量名、自定义repace函数名、自定义test函数名是否已经被定义。

关于qmake自定义函数可以参考:qmake自定义函数_Qt君的博客-CSDN博客_qmake 自定义函数 

实际操作大致与文档介绍相同,只是对build-in function进行测试时是无法检测出来的。 

type参数有test、replace、var三个可选项。如果没有type参数,检测是否是自定义的test函数或replace函数;如果使用test参数,则检测是否是自定义的test函数;如果使用replace参数则检测是否是自定义的replace函数;如果使用var参数,则检测是否是变量,包括内部定义的CONFIG、TEMPLATE等变量。
Tests whether the function or variable name is defined. If type is omitted, checks all functions. To check only variables or particular type of functions, specify type. It can have the following values:

  • test only checks test functions
  • replace only checks replace functions
  • var only checks variables
tt=true
ttv=123
tt1=  #定义空变量message($$tt)  #输出true
message($$ttv) #输出123defineTest(mytt){  #自定义函数mytt,传入参数个数是没有限制的,使用哪些个参数是内部的事情message($$ARGS)var=$$1  #$${1} 与 $$1等价varvalue=$$eval($${1})  #获取变量的值需要双重$$,需要通过eval 这个replace函数来获取message(--{1}=$${1})message(--var=$$var)message(--varvalue=$$varvalue)
}mytt(ttv)  #注意defineTest函数传入的参数是ttv这个变量名
#输出:
#ttv
#--{1}=ttv
#--var=ttv
#--varvalue=123
mytt(ttv,tt1)  #mytt中只使用第一个参数,再多的参数虽然合法但是没有意义。
#输出:
#ttv tt1
#--{1}=ttv
#--var=ttv
#--varvalue=123defineReplace(myfunc) {variable = $$ARGSnames = $$eval($$variable)tname = $$1message($$ARGS)for(name, variable) {equals(name,33):tname=$$name}return($$tname)
}defineTest(allFiles) {files = $$ARGSfor(file, files) {!exists($$file) {return(false)}}return(true)
}VAR=defined(CONFIG,var){message(here1)  //输出
}else{message(here2)
}defined(allFiles){message(here3)  //输出
}else{message(here4)
}
defined(allFiles,test){message(here5)  //输出
}else{message(here6)
}
defined(allFiles,replace){message(here7)
}else{message(here8)  //输出
}
defined(myfunc){message(here9)  //输出
}else{message(here10)
}
defined(myfunc,test){message(here11)
}else{message(here12)  //输出
}
defined(myfunc,replace){message(here13)  //输出
}else{message(here14)
}
defined(load){message(here15)
}else{message(here16)  //输出
}
defined(VAR){message(here17)
}else{message(here18)  //输出
}
defined(VAR,var){message(here19)  //输出
}else{message(here20)
}

杂谈

//E:\workspace\QtWork\qmake\library\qmakebuiltins.cpp
QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(const QMakeInternal::QMakeBuiltin &adef, const ProKey &function, const ProStringList &args)
{
m_functionDefs.testFunctions存放自定义的test函数,内置的test函数存放在static.functions中
m_functionDefs.replaceFunctions存放自定义的replace函数,内置的replace函数存放在static.expands中。defined并没有对内置函数进行查找。
........case T_DEFINED: {  const ProKey &var = args.at(0).toKey();if (args.count() > 1) {if (args[1] == QLatin1String("test")) {return returnBool(m_functionDefs.testFunctions.contains(var));} else if (args[1] == QLatin1String("replace")) {return returnBool(m_functionDefs.replaceFunctions.contains(var));} else if (args[1] == QLatin1String("var")) {ProValueMap::Iterator it;return returnBool(findValues(var, &it));}evalError(fL1S("defined(function, type): unexpected type [%1].").arg(args.at(1).toQStringView()));return ReturnFalse;}return returnBool(m_functionDefs.replaceFunctions.contains(var)|| m_functionDefs.testFunctions.contains(var));}
......

 

qmake eval(string) 函数_丘上人的博客-CSDN博客 
qmake language defineTest(testfunctionname) defineReplace(repacefunctionname) 自定义函数_丘上人的博客-CSDN博客

更多推荐

qmake language defined(name[, type])函数

本文发布于:2024-03-23 23:55:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744345.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   language   qmake   type   defined

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!