You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:20:15