makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件

发布时间 2023-10-21 10:05:20作者: imxiangzi

注:本文个人学习记录

目的:一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件

如图所示 目录结构 ,根目录server: makefile ;子目录 so :makefile

 

 

根目录makefile:

GCC=gcc

APP=server

 

ALL_C=$(wildcard ./*.c)

C_OBJ=$(notdir $(ALL_C))

O_OBJ=$(patsubst %.c,%.o,$(C_OBJ))

LIBS=-lpthread 

 

.PHONE:all  # 将all 设置成伪目标,all会第一个执行 ,但不会生产目标,依赖的目标会依次执行

all:libfile.a $(APP)   #依赖的目标 libfile.a  、 server

libfile.a:

$(MAKE) -C ./so/ #跳出当前工作目录进入到子目录中,编译.c文件,编译完后回到当前目录  $(MAKE) -C (路径)   

$(APP):$(C_OBJ)        #编译当前目录下的.c 生成目标程序

$(GCC) $^ -lfile -L./so/ -o $@ $(LIBS)

 

.PHONY:clean

clean:

rm -r $(APP) ./so/*.o ./so/*.a   #清理子目录下的编译后产生的文件 ,当前目录下的目标文件

so 目录 :编译静态库

libfile.a:myfile.o

ar crv libfile.a myfile.o

myfile.o:myfile.c

gcc -c myfile.c

.PHONY:clean

clean:

rm libfile.a myfile.o

编译验证:

 

 编译:

 

编译结果:

 

 

 

参考:多文件目录下makefile文件递归执行编译所有c文件 - Shirlies - 博客园

         嵌套执行MAKE $(MAKE) -C subdir_rongwenbin的博客-CSDN博客

 

https://blog.csdn.net/qq_35612415/article/details/123511196