Makefile Make:variable-secondexpansion中的先决条件

Makefile Make:variable-secondexpansion中的先决条件,makefile,Makefile,我想定义一个通用的makefile,它可以包含在不同的makefile中,比如将源t.c编译成t.o并归档到libl.a中: 生成文件: c、 mk: 目标是将规则%.a的先决条件扩展为libl.a的t.o 如果我用libl.a替换%.a,这似乎适用于显式规则,但不适用于隐式规则 => make: *** No rule to make target `libl.a', needed by `all'. Stop. 我能做到这一点吗 [编辑]目标确实是在同一目录中有几个库,如libl.

我想定义一个通用的makefile,它可以包含在不同的makefile中,比如将源t.c编译成t.o并归档到libl.a中:

生成文件:

c、 mk:

目标是将规则%.a的先决条件扩展为libl.a的t.o

如果我用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 
生成文件:

c、 mk:


还有什么吗?

Makefile中的libl.a:t.o有什么问题?这将导致在Makefile中定义两次依赖性:libl.a:t.o和OBJS_libl:=t。这会引起维护问题。此外,这不起作用:它只将t.c编译为t.o,但不存档。当多个库都依赖于某些对象时,这不适用。我修改了问题以澄清这一方面。
=> make: *** No rule to make target `libl.a', needed by `all'.  Stop.
LIBS := libl1 libl2
OBJS_libl1 := t1 u1 
OBJS_libl2 := t2 u2 
LIBS := libl.a
$(LIBS): t.o

include 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