Zed*_*Zed 18 makefile wildcard target subdirectory
我的应用程序主目录中有一个"lib"目录,它包含任意数量的子目录,每个子目录都有自己的Makefile.
我想在主目录中有一个Makefile,它调用每个子目录的Makefile.我知道如果我手动列出子目录这是可能的,但我想自动完成它.
我在想类似下面的东西,但它显然不起作用.请注意,我也有干净,测试等目标,所以%可能根本不是一个好主意.
LIBS=lib/*
all: $(LIBS)
%:
  (cd $@; $(MAKE))
任何帮助表示赞赏!
mrk*_*rkj 28
以下内容适用于GNU make:
LIBS=$(wildcard lib/*)
all: $(LIBS)
.PHONY: force
$(LIBS): force
  cd $@ && pwd
如果可能存在除目录之外的其他内容lib,您可以使用:
LIBS=$(shell find lib -type d)
要解决多个目标问题,您可以为每个目录构建特殊目标,然后剥离子构建的前缀:
LIBS=$(wildcard lib/*)
clean_LIBS=$(addprefix clean_,$(LIBS))
all: $(LIBS)
clean: $(clean_LIBS)
.PHONY: force
$(LIBS): force
  echo make -C $@
$(clean_LIBS): force
  echo make -C $(patsubst clean_%,%,$@) clean