makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件
注:本文个人学习记录
目的:一个工程里有多个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