我有一个基本上看起来像这样的makefile:
testa:
make -C dog/ testa
make -C cat/ testa
testb:
make -C dog/ testb
make -C cat/ testb
有多个文件夹1 ... 10。当我在顶层运行'make testa'时,它逐个遍历所有子目录,并在下面的所有文件夹上运行命令'make testa'。有没有更好的方法来实现这一点,而不是使用相同make -C folderx/ testy
的几行?
感谢
答案 0 :(得分:1)
您可以使用target-specific values:
将目标名称与子目录分离testa: TARG:=testa
testb: TARG:=testb
testa testb:
make -C dog/ $(TARG)
make -C cat/ $(TARG)
然后将工作委托给以子目录命名的目标:
testa: TARG:=testa
testb: TARG:=testb
SUBDIRS := dog cat
testa testb: $(SUBDIRS)
.PHONY: $(SUBDIRS)
$(SUBDIRS):
make -C $@ $(TARG)
答案 1 :(得分:0)
这是一个解决方案:
TARGETS := testa testb
DIRS := dog cat
define TARGETS_TO_DIRS
$(foreach target, $1, $(eval $(target): $(addsuffix /$(target), $2)))
$(foreach dir, $2, $(foreach target, $1, $(dir)/$(target))):
$(MAKE) -C $$(@D) $$(@F)
endef
$(eval $(call TARGETS_TO_DIRS, $(TARGETS), $(DIRS)))