我想定义一个通用的makefile,可以像这样被不同的makefile包含(其中一个源tc被编译到libl.a中并存档):
生成文件:
LIBS := libl
OBJS_libl := t
include c.mk
c.mk:
ALIBS := $(LIBS:%=%.a)
.SECONDEXPANSION:
all : $(ALIBS)
%.a : $$(patsubst %,%.o,$$(OBJS_$$(patsubst %.a,%,$$(@F))))
ar crs $@ $(patsubst %,%.o,$(OBJS_$(@F:%.a=%)))
%.o : %.c
gcc -c $(@F:%.o=%.c) -o $@
目标是规则 %.a 的先决条件扩展到 libl.a
这似乎适用于显式规则(如果我将 %.a 替换为 libl.a),但不适用于隐式规则。
=> make: *** No rule to make target `libl.a', needed by `all'. Stop.
我可以做到这一点,请问如何?
[编辑] 目标确实是在同一个目录中拥有几个库,如 libl.a,每个库都使用一些对象:
LIBS := libl1 libl2
OBJS_libl1 := t1 u1
OBJS_libl2 := t2 u2