Shell Makefile-对函数“foreach';”的未终止调用:缺少“)';。停止

Shell Makefile-对函数“foreach';”的未终止调用:缺少“)';。停止,shell,build,foreach,makefile,Shell,Build,Foreach,Makefile,这个问题快把我逼疯了!以下是我的简单makefile: SOURCES = a b c $(foreach var,$(SOURCES),echo $(var);) all: @echo done 使用Make3.8,我得到了Makefile:3:**对函数“foreach”的未终止调用:missing')。停止。 使用make3.81,我得到Makefile:3:**缺少分隔符。停止。 但是,如果我将foreach行放在“all”目标内,它运行良好。救命 foreach将产生一系

这个问题快把我逼疯了!以下是我的简单makefile:

SOURCES = a b c

$(foreach var,$(SOURCES),echo $(var);)

all:
    @echo done
使用Make3.8,我得到了
Makefile:3:**对函数“foreach”的未终止调用:missing')。停止。

使用make3.81,我得到
Makefile:3:**缺少分隔符。停止。


但是,如果我将foreach行放在“all”目标内,它运行良好。救命

foreach将产生一系列
echo
命令。您不能将它们放在makefile的顶层。改用:

例如:

$ make
a
b
c
done

你把Make语法和shell语法弄混了

如果将此语句置于规则之外,它将扩展为

回声a;回声b;回声c

就Make而言,这是无稽之谈,因为1)
echo
不是有效的Make命令,2)Make不会接受扩展语句的值作为命令(除非使用
eval

你应该:

  • 试过“回声a;”,发现它不符合规则,
  • 发现了“信息”并接通了电话,
  • 试过‘foreach…’后发现它不起作用,
  • 发现了“eval”。
    $ make
    a
    b
    c
    done