0

这个问题快把我逼疯了!这是我的简单生成文件:

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 行放在“所有”目标中,它运行良好。帮助!!

4

2 回答 2

0

您正在混淆 Make 语法和 shell 语法。

如果将此语句放在规则之外,它会扩展为

回声一个;回声 b; 回声 c;

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

你应该有:

  1. 尝试了`echo a;`,发现它在规则之外不起作用,
  2. 发现了“信息”并让线路开始工作,
  3. 尝试了`foreach...`,发现不行,
  4. 发现了`eval`。
于 2013-09-24T18:51:50.840 回答
0

foreach将产生一堆echo命令。你不能在makefile的顶层拥有那些。改用$(info)

$(foreach var,$(SOURCES),$(info $(var)))

例子:

$ make
a
b
c
done
于 2013-09-24T18:48:42.213 回答