之前介绍了项目Makefile的写法,详见http://blog.youkuaiyun.com/xhjcehust/article/details/51096924
链接主要讲述的是单个目录下的Makefile写法,本文在此基础上介绍多目录的Makefile写法,目录结构为:
在cli、exp、trig子目录下的文件分别为:
文件之间的关系为exp和trig下的文件include<math330.h>,每个文件都是独立文件,最终需要将生成的目标文件链接成一个库文件,在此基础上,cli文件与库链接,
最终生成可执行文件。
在实现方案上,会在主目录下生成include和lib目录,然后将生成的链接库放到lib目录,math330.h放到include目录,最后生成可执行文件。
具体Makefile的内容为:
DIRS=include lib
OBJS=trig/cos330.o trig/sin330.o trig/tan330.o trig/arccos330.o trig/arcsin330.o trig/arctan330.o exp/exp330.o exp/log330.o
FLAGS=-Wall -g -I include
LIB=lib/libmath330.a
EXEC=cli/cli
all:$(DIRS) $(LIB) $(EXEC)
$(DIRS):
-mkdir $(DIRS)
cp math330.h include/
$(EXEC):$(LIB) cli/cli.c
gcc $(FLAGS) -o $(EXEC) cli/cli.c lib/libmath330.a -lm
$(LIB):$(OBJS)
ar -r $(LIB) $(OBJS)
trig/cos330.o:trig/cos330.c
gcc $(FLAGS) -c -o $@ $<
trig/sin330.o:trig/sin330.c
gcc $(FLAGS) -c -o $@ $<
trig/tan330.o:trig/tan330.c
gcc $(FLAGS) -c -o $@ $<
trig/arccos330.o:trig/arccos330.c
gcc $(FLAGS) -c -o $@ $<
trig/arcsin330.o:trig/arcsin330.c
gcc $(FLAGS) -c -o $@ $<
trig/arctan330.o:trig/arctan330.c
gcc $(FLAGS) -c -o $@ $<
exp/exp330.o:exp/exp330.c
gcc $(FLAGS) -c -o $@ $<
exp/log330.o:exp/log330.c
gcc $(FLAGS) -c -o $@ $<
clean:
-rm $(DIRS) -rf
-rm $(OBJS) $(EXEC)
.PHONY:clean