如何在qmake中链式调用两次dirname函数?
QMake中无需中间变量链式调用两次dirname函数的方案
问题描述
给定如下QMake代码:
SOME_PATH = "/path/to/folder/with/file.txt" message("parent dir: $$dirname(SOME_PATH)") message("grandparent dir: $$dirname($$dirname(SOME_PATH))")
执行后输出结果为:
Project MESSAGE: parent dir: /path/to/folder/with Project MESSAGE: grandparent dir:
其他替换函数支持直接链式调用,但dirname函数嵌套调用时无法得到正确的祖父目录,需要找到不依赖中间变量的实现方式。
解决方案
QMake的dirname函数参数解析逻辑特殊,直接嵌套调用时无法正确识别内层函数的返回值。可以通过用额外的$$()包裹内层dirname调用,强制优先执行内层函数,再将结果作为外层dirname的参数。
修正后的代码:
SOME_PATH = "/path/to/folder/with/file.txt" message("parent dir: $$dirname(SOME_PATH)") message("grandparent dir: $$dirname($$($$dirname(SOME_PATH)))")
执行后可得到正确输出:
Project MESSAGE: parent dir: /path/to/folder/with Project MESSAGE: grandparent dir: /path/to/folder
原理说明
额外的$$()会触发QMake先计算内层$$dirname(SOME_PATH)的结果,得到父目录路径后,再将该路径传递给外层的dirname函数,从而正确解析出祖父目录的路径。
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

