[dywang@dyw219 make1]$ cp makefile2 makefile3 [dywang@dyw219 make1]$ vim makefile3 [dywang@dyw219 make1]$ grep MYLIB -A1 makefile3 MYLIB = mylib.a main: main.o $(MYLIB) $(CC) -o $@ $(OBJS) $(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o) main.o: main.c a.h
[dywang@dyw219 make1]$ make -p -f makefile3 | sed '/^#/d' | sed '/^$/d' | grep "^AR.*=" --color ARFLAGS = rv AR = ar
mylib.a(2.o), mylib.a(3.o)
的預設法則是 $(AR) $(ARFLAGS) $@ $<
。其中變數為:
$(AR)
: ar
$(ARFLAGS)
: rv
$<
代表目前的相依性項目,目標項目 mylib.a(2.o) 的相依項目就是 2.o;目標項目 mylib.a(3.o) 的相依項目則是 3.o。
$@
代表目前的目標項目,就是 mylib.a 函式庫。
[dywang@dyw219 make1]$ make -p -f makefile3 | sed '/^#/d' | sed '/^$/d' | grep -A1 "mylib.a" --color MYLIB = mylib.a COMPILE.C = $(COMPILE.cc) -- mylib.a: mylib.a(2.o) mylib.a(3.o) 3.c: mylib.a(3.o): 3.o $(AR) $(ARFLAGS) $@ $< -- main: main.o mylib.a $(CC) -o $@ $(OBJS) -- mylib.a(2.o): 2.o $(AR) $(ARFLAGS) $@ $<
[dywang@dyw219 make1]$ rm mylib.a [dywang@dyw219 make1]$ make -f makefile3 ar rv mylib.a 2.o ar: creating mylib.a a - 2.o ar rv mylib.a 3.o a - 3.o gcc -o main main.o 2.o 3.o
[dywang@dyw219 make1]$ rm 3.o [dywang@dyw219 make1]$ make -f makefile3 gcc -Wall -c 3.c ar rv mylib.a 3.o r - 3.o gcc -o main main.o 2.o 3.o