複数の形式があるライブラリ用のメークファイルも、同様の方法で変更します。
# 複数の形式のライブラリを別々に扱うためのメークファイル
CFLAGS= -O
SOURCES= main.c rest.c
LIBRARY= lib.a
LSOURCES= fnc.c
OBJECTS= $(SOURCES:%.c=$(VARIANT)/%.o)
VLIBRARY= $(LIBRARY:%.a=$(VARIANT)/%.a)
LOBJECTS= $(LSOURCES:%.c=$(VARIANT)/%.o)
VARIANT= .
program profile debug: $$(OBJECTS) $$(VLIBRARY)
$(LINK.c) -o $(VARIANT)/$@ $<
lib.a debug_dir/lib.a profile_dir/lib.a: $$(LOBJECTS)
ar rv $@ $?
$$(VLIBRARY)($$(VARIANT)%.o): $$(VARIANT)%.o
@true
profile := VARIANT = profile_dir
profile := CFLAGS = -O -pg
debug := VARIANT = debug_dir
debug := CFLAGS = -g
.KEEP_STATE:
profile_dir debug_dir:
test -d $@ || mkdir $@
$$(VARIANT)/%.o: %.c
$(COMPILE.c) $< -o $@
複数の形式を管理するこの手法は、便利ですがやや複雑です。説明を簡潔にするため、この手法は以下の例では省略しています。