Makefile:动态调度到其他makefile

时间:2016-04-30 18:28:01

标签: makefile gnu-make

我有很多子目录,里面有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。

2 个答案:

答案 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 $@

快速点几点:

  • 您不应直接在makefile中调用make。请改用$(MAKE)
  • $(MAKE) -C dircd dir && make
  • 做同样的事情
  • 如果您的makefile确保只有一个级别,请使用ls */Makefile而不是find * -name Makefile。发布的解决方案将在子目录中找到所有makefile,这可能不是您想要的。
  • 您应该注意,其中一个子目录名称不会与主makefile中的任何其他目标名称冲突。为此需要某种目录命名/目标命名约定。