Makefile

********************************************************************************
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)

posted @ 2012-03-31 00:10  Leung文  阅读(164)  评论(0编辑  收藏  举报