我正在编写一个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
的数量,或使用反斜杠$
进行转义。它没有帮助...
我该如何解决这个问题?
答案 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))))