$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
$(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))
上述行中的 Make 失败,说缺少分隔符。
:68: *** missing separator. Stop.
$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
$(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))
上述行中的 Make 失败,说缺少分隔符。
:68: *** missing separator. Stop.
要在同一个存档中指定多个成员,您可以将所有成员名称一起写在括号之间。例如:
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))))