Makefile - 对函数`foreach'的未终止调用:缺少`)'。停止

时间:2013-09-24 18:45:50

标签: shell build foreach makefile

这个问题让我疯了!这是我简单的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'目标中,它运行正常。帮助!

2 个答案:

答案 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}})。

你应该:

  1. 试过`echo a;`,发现它没有在规则之外工作,
  2. 找到了关于`info`的信息并开始工作,
  3. 试过`foreach ...'并发现它没有用,
  4. 发现了'eval`。