入门级makefile递归调用示例,添加子目录在rule.mk中手动添加,如需自动添加,后续再给出示例。
1、主makefile
2、rule.mk
3、subdir下makefile
subdir1
subdir2
3、目录结构makefile platfrom/makefile driver/makefile
1、主makefile
点击(此处)折叠或打开
- #SUBDIR+=subdir
- TOPDIR=$(shell pwd)#调用shell 命令,默认的解析器为SHELL=/bin/sh
- export TOPDIR#导出环境变量给子makefile使用
- include $(TOPDIR)/rule.mk#加载.mk文件,实际上就是解析.mk里面的内容
- all:$(SUBDIR)#默认的执行规则目标
- @echo "*** star makefile test ***"#加上@符号,执行命令的时候不回显
- @for dir in $(SUBDIR); \#在每个规则中,每一个命令行都是独立的shell子进程,故要实现一个复杂的shell,应保证在同一行,故使用\符号
- do \
- $(MAKE) -C $$dir || exit 1; \#$(MAKE)make默认的环境变量,为make,-C 表示到指定目录下去
- done
- .PHONY :clean#伪目标,调用方式make clean
- clean:
- $(RM) *.o#RM = rm -f 也是默认的环境变量
点击(此处)折叠或打开
- SUBDIR:=platform driver
subdir1
点击(此处)折叠或打开
- include $(TOPDIR)/rule.mk
- CURDIR=$(shell pwd)
- GCC=gcc
- TARGET=test
- all:
- @echo "*******makefiel in $(CURDIR) "
- .PHONY:clean
- clean:
- $(RM) *.o $(TARGET)
点击(此处)折叠或打开
- #SUBDIR+=subdir
- include $(TOPDIR)/rule.mk
- CURDIR=$(shell pwd)
- all:
- @echo "*** makefile in $(CURDIR)"
- .PHONY :clean
- clean:
- $(RM) *.o