一、嵌套执行的概念
在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这样会很难维护我们的Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。
二、示例目录结构
nest
├─dir1
│ └─Makefile #1级Makefile
├─dir2
│ └─Makefile #1级Makefile
└─Makefile #0级顶层Makefile
三、Makefile内容
0级顶层Makefile
all:
@echo $(MAKELEVEL)
@make -C dir1
@make -C dir2
dir1 Makefile
all:
@echo "in dir1"
@echo $(MAKELEVEL)
dir2 Makefile
all:
@echo "in dir2"
@echo $(MAKELEVEL)
四、执行结果
0
make[1]: 进入目录“/home/fly1000fans/source/makefiledir/nest/dir1”
in dir1
1
make[1]: 离开目录“/home/fly1000fans/source/makefiledir/nest/dir1”
make[1]: 进入目录“/home/fly1000fans/source/makefiledir/nest/dir2”
in dir2
1
make[1]: 离开目录“/home/fly1000fans/source/makefiledir/nest/dir2”
五、结论
执行 make -C subdirs会进行make的嵌套调用,MAKELEVEL为当前Makefile的调用等级,最上层Makefile为0级