我有很多子目录,里面有Makefile,我想要一个“master”Makefile,它基本上在那些目录中调用Makefile:
Makefile
foo/Makefile
bar/Makefile
因此,在根目录中键入make foo
等同于cd foo && make
。我可以编写简单的Makefile来解决这个问题:
foo:
cd foo && make
bar:
cd bar && make
但我不想列出这些子目录,所以我可以使用Makefile添加新目录,而无需修改“master”Makefile。
答案 0 :(得分:1)
我认为make
可能不是解决此特定问题的最佳工具。为什么不是shell脚本?
#!/bin/sh
cd $1 && make
如果您真的决心只使用make
,那么可以使用这样的makefile:
DIRS=$(patsubst %/,%,$(wildcard */))
.PHONY: $(DIRS)
$(DIRS):
@cd $@ && $(MAKE)
答案 1 :(得分:0)
我认为你想要的是这样的:
subdirs := $(shell find * -name Makefile | sed /\/Makefile$//)
$(subdirs):
$(MAKE) -C $@
快速点几点:
make
。请改用$(MAKE)
。$(MAKE) -C dir
与cd dir && make
ls */Makefile
而不是find * -name Makefile
。发布的解决方案将在子目录中找到所有makefile,这可能不是您想要的。