1

我想定义一个通用的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 
4

1 回答 1

0

生成文件:

LIBS := libl.a
$(LIBS): t.o

include c.mk

c.mk:

%.a:
    ar crs $@ $^

%.o : %.c
    gcc -c $< -o $@

编辑:

LIBS := libl1.a libl2.a
$(LIBS):
libl1.a : t1.o u1.o 
libl2.a : t2.o u2.o 

还要别的吗?

于 2012-12-14T16:32:45.477 回答