制作:变量的先决条件 - secondexpansion

时间:2012-12-13 11:39:53

标签: makefile

我想定义一个通用的makefile,它可以包含在不同的makefile中(如果源t.c被编译成t.o并在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的先决条件扩展为t.o for libl.a

这似乎适用于显式规则(如果我用libl.a替换%.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 

1 个答案:

答案 0 :(得分: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 

还有别的吗?