这个问题让我疯了!这是我简单的makefile:
SOURCES = a b c
$(foreach var,$(SOURCES),echo $(var);)
all:
@echo done
使用make 3.8,我得到Makefile:3: *** unterminated call to function 'foreach': missing ')'. Stop.
使用make 3.81,我得到Makefile:3: *** missing separator. Stop.
但是,如果我将foreach行放在'all'目标中,它运行正常。帮助!
答案 0 :(得分:0)
foreach
会产生一堆echo
命令。你不能把它们放在makefile的顶层。请改用$(info)
:
$(foreach var,$(SOURCES),$(info $(var)))
示例:
$ make
a
b
c
done
答案 1 :(得分:0)
您正在混淆Make语法和shell语法。
如果您将此语句置于规则之外,则会扩展为
回声a;回声b; echo c;就Make而言,这是无稽之谈,因为1)echo
不是有效的Make命令,2)make不会接受扩展语句的值作为命令(除非你使用{{ 1}})。
你应该: