makefile递归调用实例

本文通过一个实例展示了如何在Makefile中进行递归调用,解释了如何设置环境变量,导出变量给子Makefile,以及如何通过规则和循环来遍历并构建子目录中的目标。内容包括`SUBDIR`变量的定义,`TOPDIR`获取当前目录,以及`$(MAKE) -C`命令用于在子目录中执行make操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入门级makefile递归调用示例,添加子目录在rule.mk中手动添加,如需自动添加,后续再给出示例。
1、主makefile

点击(此处)折叠或打开

  1. #SUBDIR+=subdir
  2. TOPDIR=$(shell pwd)#调用shell 命令,默认的解析器为SHELL=/bin/sh
  3. export TOPDIR#导出环境变量给子makefile使用
  4. include $(TOPDIR)/rule.mk#加载.mk文件,实际上就是解析.mk里面的内容

  5. all:$(SUBDIR)#默认的执行规则目标
  6.     @echo "*** star makefile test ***"#加上@符号,执行命令的时候不回显
  7.     @for dir in $(SUBDIR); \#在每个规则中,每一个命令行都是独立的shell子进程,故要实现一个复杂的shell,应保证在同一行,故使用\符号
  8.         do \
  9.         $(MAKE) -C $$dir || exit 1; \#$(MAKE)make默认的环境变量,为make,-C 表示到指定目录下去
  10.         done

  11. .PHONY :clean#伪目标,调用方式make clean
  12. clean:
  13.     $(RM) *.o#RM = rm -f 也是默认的环境变量
2、rule.mk

点击(此处)折叠或打开

  1. SUBDIR:=platform driver
3、subdir下makefile
subdir1

点击(此处)折叠或打开

  1. include $(TOPDIR)/rule.mk
  2. CURDIR=$(shell pwd)
  3. GCC=gcc
  4. TARGET=test

  5. all:
  6.     @echo "*******makefiel in $(CURDIR) "
  7. .PHONY:clean
  8. clean:
  9.     $(RM) *.o $(TARGET)
subdir2

点击(此处)折叠或打开

  1. #SUBDIR+=subdir
  2. include $(TOPDIR)/rule.mk
  3. CURDIR=$(shell pwd)
  4. all:
  5.     @echo "*** makefile in $(CURDIR)"
  6. .PHONY :clean
  7. clean:
  8.     $(RM) *.o
3、目录结构makefile platfrom/makefile driver/makefile


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值