1

このようなさまざまなメイクファイルに含めることができる汎用メイクファイルを定義したいと思います (ソース 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 に答える