我有一个包含两个目标的 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
您掩盖了可以从
make
本身获得的简单而明显的调试帮助。不要在你的食谱中乱扔@
。当您真的不关心它在做什么时,请使用 make -s
。
为了帮助调试,我取出了
@
装饰,并在 echo
的参数周围添加了单引号。
bash$ make new2
new2------------
echo '.././../log'
.././../log
echo ' log'
log
echo '.././../log'
.././../log
echo ' .././../log'
.././../log
您问题中的格式有点不稳定,但通过这些更改,我希望您能找出问题所在。