如何在Makefile中命令make
命令在所有子目录make
命令(在子目录的Makefile中定义)中递归执行?
答案 0 :(得分:18)
P.S。从my answer到另一个相关问题的代码段可用作粗略近似值。
答案 1 :(得分:7)
@ eldar-abusalimov,您发布的第一个链接假定makefile 知道子文件夹是什么。这并不总是正确的,我想这就是@tyranitar想知道的。在这种情况下,这样的解决方案可以完成这项工作: (花了我一些时间,但我也需要它)
SHELL=/bin/bash
all:
@for a in $$(ls); do \
if [ -d $$a ]; then \
echo "processing folder $$a"; \
$(MAKE) -C $$a; \
fi; \
done;
@echo "Done!"
答案 2 :(得分:3)
我将在这里提交我的特定解决方案。 假设我们有一个包含许多子目录的目录,所有子目录都有自己的makefile:
root-dir\
+----subdir1
+----subdir2
...
+----subdirn
然后,只需复制root-dir这个Makefile:
SUBDIRS = $(shell ls -d */)
all:
for dir in $(SUBDIRS) ; do \
make -C $$dir ; \
done
答案 3 :(得分:1)
当所有子目录都具有Makefiles时,上述答案将非常有效。仅在包含Makefile的目录上运行make并不困难,也不难限制要递归的级别数。在我的示例代码中,我将搜索makefile文件限制在父目录下的子目录中。 filter-out语句(第2行)阻止此Makefile包含在递归make中。
MAKEFILES = $(shell find . -maxdepth 2 -type f -name Makefile)
SUBDIRS = $(filter-out ./,$(dir $(MAKEFILES)))
all:
for dir in $(SUBDIRS); do \
make -C $$dir all; \
done