多子目录的makefile编译库模板

    xiaoxiao2021-03-26  27

    经过不断的实验,终于改出来了一个可以用于多个子目录,多个文件的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.h 3 directories, 12 files [zhang@zwfedora23 libs]$

    具体的Makefile文件内容:

    LIB_SRC1 = ./src1 LIB_SRC2 = ./src2 LIB_A := libs.a #VPATH = $(LIB_SRC1) $(LIB_SRC2) SRC := $(wildcard $(LIB_SRC1)/*.c) SRC += $(wildcard $(LIB_SRC2)/*.c) OBJS := $(patsubst %.c,%.o,$(SRC)) CC:=gcc CFLAGS:= -I./ .PNONY:all clean all: $(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]$ make gcc -c -I./ src1/libs1.c -o src1/libs1.o gcc -c -I./ src1/libs1a.c -o src1/libs1a.o gcc -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.o ar rcv libs.a src1/libs1.o src1/libs1a.o src2/libs2.o a - src1/libs1.o a - src1/libs1a.o a - 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.o 3 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 hello hello,libs2 [zhang@zwfedora23 libs]$ ls libs.a Makefile src src1 src2 test [zhang@zwfedora23 libs]$

    收工。

    转载请注明原文地址: https://ju.6miu.com/read-662963.html

    最新回复(0)