我有一个目录(root_dir),它包含一些子目录(subdir1,subdir2,…).
我想在root_dir中的每个目录中运行make,使用放置在其中的Makefile.
(显然应该是每个子目录里面都有自己的Makefile).
所以基本上有两个问题:
>如何获取Makefile中的目录列表(自动)?
>如何为make文件中的每个目录运行make?
为了在特定的目录中运行make,我谨此着手做以下事情:
$(MAKE) -C subdir
解决方法
在单个配方中进行for循环中的子制作存在各种问题.执行多个子目录的最佳方法是这样的:
SUBDIRS := $(wildcard */.) all: $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@ .PHONY: all $(SUBDIRS)
(只是指出这是GNU具体的;你没有提到任何使用版本的限制).
ETA这是一个支持多个顶级目标的版本.
TOPTARGETS := all clean SUBDIRS := $(wildcard */.) $(TOPTARGETS): $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@ $(MAKECMDGOALS) .PHONY: $(TOPTARGETS) $(SUBDIRS)