********************************************************************************
wildcard:扩展通配符
patsubst:替换通配符
$@:规则的目标文件名。
$%:规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的目标是“foo.a(bar.o)”,那么,“$%”的值就为“bar.o”,“$@”的值为“foo.a”。如果目标不是函数库文件,其值为空。
$<:规则的第一个依赖文件名。如果是隐含规则,则它代表通过目标指定的第一个依赖文件。
$?:目标文件更新的依赖文件列表,空格分割。
$^:规则的所有依赖文件列表(去掉重复的),使用空格分隔。
$+:类似“$^”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时,库的交叉引用场合。
********************************************************************************
DIRS = src1 src2 src3
all:
for i in $(DIRS) ; do make -C $$i || exit 1;done
clean:
for i in $(DIRS) ; do make -C $$i clean || exit 1;done
********************************************************************************
CC = g++
CCFLAG = -c -g -w -fPIC
LDFLAG = -g -w
SOFLAG = -g -w -shared
SRCS = $(wildcard *.cpp)
OBJS = $(patsubst %.cpp,%.o,$(SRCS))
INCS = -I../include
LIBS = -L../lib
TARG = target
$(TARG) : $(OBJS)
$(CC) $(LDFLAG) -o $@ $(OBJS) $(LIBS)
%.o: %.cpp
$(CC) $(CCFLAG) $< $(INCS)
clean:
rm -f $(OBJS) $(TARG)