制作wildcard子目录

Zed*_*Zed 18 makefile wildcard target subdirectory

我的应用程序主目录中有一个"lib"目录,它包含任意数量的子目录,每个子目录都有自己的Makefile.

我想在主目录中有一个Makefile,它调用每个子目录的Makefile.我知道如果我手动列出子目录这是可能的,但我想自动完成它.

我在想类似下面的东西,但它显然不起作用.请注意,我也有干净,测试等目标,所以%可能根本不是一个好主意.

LIBS=lib/*

all: $(LIBS)

%:
  (cd $@; $(MAKE))
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

mrk*_*rkj 28

以下内容适用于GNU make:

LIBS=$(wildcard lib/*)
all: $(LIBS)
.PHONY: force
$(LIBS): force
  cd $@ && pwd
Run Code Online (Sandbox Code Playgroud)

如果可能存在除目录之外的其他内容lib,您可以使用:

LIBS=$(shell find lib -type d)
Run Code Online (Sandbox Code Playgroud)

要解决多个目标问题,您可以为每个目录构建特殊目标,然后剥离子构建的前缀:

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
Run Code Online (Sandbox Code Playgroud)