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的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值