如何在Makefile宏中正确转义$

时间:2019-03-28 14:05:40

标签: makefile

我正在编写一个Makefile,其中有一个在foreach中调用的函数。 在此功能中,我想使用awk命令。 但是,我不知道如何正确转义$3

这是简化的代码。 ($有三列,第三列是一个值)

input.txt

执行上面的代码时,出现错误

define MyFunction %/filtered$(1).txt: %/input.txt cat $$*/input.txt | awk '{ if ($$3 < $(1)) print }' endef $(foreach threshold,1 2 3,$(eval $(call MyFunction,$(threshold))))

我尝试修改awk: syntax error at source line 1的数量,或使用反斜杠$进行转义。它没有帮助...

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的问题是call函数将对宏进行一次评估,然后在运行配方时将对其再次进行评估,然后awk命令需要查看$。因此,您必须使用$$$$两次

define MyFunction
%/filtered$(1).txt: %/input.txt
        cat $$*/input.txt | awk '{ if ($$$$3 < $(1)) print }'

endef

如果您想了解make解析的一个好窍门,就是将eval替换为info

$(foreach threshold,1 2 3,$(info $(call MyFunction,$(threshold))))
$(foreach threshold,1 2 3,$(eval $(call MyFunction,$(threshold))))