多子目录的makefile编译库模板

来源:互联网 发布:死是什么感觉 知乎 编辑:程序博客网 时间:2024/05/29 18:37

经过不断的实验,终于改出来了一个可以用于多个子目录,多个文件的Makefile模板,只用来生成静态库文件,后面再继续添加内容吧

先来看下目录结构

[zhang@zwfedora23 libs]$ tree.├── Makefile├── src│   ├── libs1.c│   ├── libs1.h│   ├── libs2.c│   ├── libs2.h│   └── main.c├── src1│   ├── libs1a.c│   ├── libs1a.h│   ├── libs1.c│   └── libs1.h└── src2    ├── libs2.c    └── libs2.h3 directories, 12 files[zhang@zwfedora23 libs]$ 

具体的Makefile文件内容:

LIB_SRC1 = ./src1LIB_SRC2 = ./src2LIB_A := libs.a#VPATH = $(LIB_SRC1) $(LIB_SRC2)SRC := $(wildcard $(LIB_SRC1)/*.c)SRC += $(wildcard $(LIB_SRC2)/*.c)OBJS := $(patsubst %.c,%.o,$(SRC))CC:=gccCFLAGS:= -I./.PNONY:all cleanall: $(LIB_A)clean:  @rm -f $(OBJS)  @rm -f $(LIB_A) $(OBJS):%.o:%.c  $(CC) -c $(CFLAGS) $^ -o $@$(LIB_A):$(OBJS)  @echo '$$OBJS'=$(OBJS)  @echo '$$(SRC)/*.c'=$(SRC)  @echo '$$@' = $@  @echo '$$^' = $^  @echo '$$<' = $<  $(AR) rcv $@ $^

仔细看的话,其实这个Makefile中也没有什么东西,也大概完全可以看懂,但是在今天之前要是让我从0开始手写或者在别人的Makefile中改出一个来我还真有点含糊。但是现在不会了,今天晚上试了好多终于有成果了。
看下最后执行的效果:

[zhang@zwfedora23 libs]$ makegcc -c -I./ src1/libs1.c -o src1/libs1.ogcc -c -I./ src1/libs1a.c -o src1/libs1a.ogcc -c -I./ src2/libs2.c -o src2/libs2.o$OBJS=./src1/libs1.o ./src1/libs1a.o ./src2/libs2.o$(SRC)/*.c=./src1/libs1.c ./src1/libs1a.c ./src2/libs2.c$@ = libs.a$^ = src1/libs1.o src1/libs1a.o src2/libs2.o$< = src1/libs1.oar rcv libs.a src1/libs1.o src1/libs1a.o src2/libs2.oa - src1/libs1.oa - src1/libs1a.oa - src2/libs2.o[zhang@zwfedora23 libs]$ tree.├── libs.a├── Makefile├── src│   ├── libs1.c│   ├── libs1.h│   ├── libs2.c│   ├── libs2.h│   └── main.c├── src1│   ├── libs1a.c│   ├── libs1a.h│   ├── libs1a.o│   ├── libs1.c│   ├── libs1.h│   └── libs1.o└── src2    ├── libs2.c    ├── libs2.h    └── libs2.o3 directories, 16 files[zhang@zwfedora23 libs]$ 

可以看到,每个.c文件对应的.o文件都在同一个目录,最后的.a文件在项目的根目录,这正是我想要的,一点都不差。而且我还写了个main.c来测试生成的.a文件,结果也是正确的。

[zhang@zwfedora23 libs]$ gcc src/main.c -L./ -ls -o test[zhang@zwfedora23 libs]$ ./test hellohello,libs2[zhang@zwfedora23 libs]$ lslibs.a  Makefile  src  src1  src2  test[zhang@zwfedora23 libs]$ 

收工。

0 0
原创粉丝点击