缺少分隔符会出错

时间:2012-05-27 21:03:42

标签: makefile

$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
          $(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))

在上面的行中说失败的分隔符。

:68: *** missing separator.  Stop.

1 个答案:

答案 0 :(得分:1)

来自the GNUMake manual

  

要在同一档案中指定多个成员,您可以编写所有成员   成员名称在括号之间。例如:

 foolib(hack.o kludge.o)
     

相当于:

 foolib(hack.o) foolib(kludge.o)

然而,这似乎不适用于先决条件(GNUMake 3.8.2):

# This works:
     flib: foolib(hack.o) foolib(kludge.o)

# This doesn't:
     flib: foolib(hack.o kludge.o)

所以我们只需要一个小修改(使用@ Neil的快捷方式和一些小心处理的括号):

# Change this:
$(foreach name, $(LIBS:lib%.a=%), \
  $(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))


# to this:
lparen := (
rparen := )

$(foreach name, $(LIBS:lib%.a=%), \
  $(eval lib$(name).a : $($(name)_OBJS:%=lib$(name).a$(lparen)%$(rparen))))