$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
$(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))
使上述行失敗說遺漏分隔符。缺失分隔符使錯誤
:68: *** missing separator. Stop.
$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
$(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))
使上述行失敗說遺漏分隔符。缺失分隔符使錯誤
: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)
所以我們只是需要一個小的修改(使用@尼爾的捷徑和小心處理括號):
# 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))))
我會試試這個解決方案! – user1293997
$(eval。)之前有一個空格,爲了避免我只用一行命令。 – user1293997
我不知道你的問題的答案。你想要的雙重擴展是棘手的。但是,我在Makefile文本中看到了$$。如果您使用GNU Make,您是否調查過'.SECONDEXPANSION'目標? – thb
我得到'***沒有規則來製作目標\ libLIB.a(OBJ.o)',這是'libLIB.a'所需要的。 Stop.' – Neil
此外,您應該可以使用''(LIBS:lib%.a =%)',它比等效的'patsubst'調用短。 – Neil