当模式是 Makefile 中函数的返回值时,为什么 patsubst 和 subst 不起作用?

问题描述 投票:0回答:1

我有一个包含两个目标的 Makefile,new 和 new2,它们旨在使用 patsubst 和 subst 函数从路径中删除或替换特定字符串。这些函数在 new 目标中按预期工作,但当模式或替换源自函数的返回值时,它们在 new2 目标中不起作用。

这是我的 Makefile:

path := .././../log
from := log
new:
    @echo "new------------"
    @echo $(path)
    @echo $(from)
    @echo $(patsubst %$(from),%,$(path))
    @echo $(subst $(from),, $(path))

define get_log
    log
endef

from2 := $(call get_log, $(path))
new2:
    @echo "new2------------"
    @echo $(path)
    @echo $(from2)
    @echo $(patsubst %$(from2),%,$(path))
    @echo $(subst $(from2),, $(path))

当我运行 make new new2 时,我得到以下输出:

new------------
.././../log
log
.././../
.././../
new2------------
.././../log
log
.././../log
.././../log
makefile
1个回答
0
投票

您掩盖了可以从

make
本身获得的简单而明显的调试帮助。不要在你的食谱中乱扔
@
。当您真的不关心它在做什么时,请使用
make -s

为了帮助调试,我取出了

@
装饰,并在
echo
的参数周围添加了单引号。

bash$ make new2
new2------------
echo '.././../log'
.././../log
echo '    log'
    log
echo '.././../log'
.././../log
echo ' .././../log'
 .././../log

您问题中的格式有点不稳定,但通过这些更改,我希望您能找出问题所在。

© www.soinside.com 2019 - 2024. All rights reserved.