如何编写通用的递归makefile

时间:2015-03-19 16:22:37

标签: recursion makefile

我想写一个通用的make文件。

例如,给定一个这样的树:

/
|-Makefile
|-Foo
|  |-Makefile
|  |-Foo1
|  |  |-Makefile
|  |  |-Foo11
|  |-Foo2
|  |-Makefile
|-Bar
|  |-Makefile
|  |-Bar1
|  |  |-Makefile
|  |  |-Bar11
|  |  |  |-Makefile
|  |-Bar2
|  |  |-Makefile
|

我希望通过在根makefile上调用make <target>,它会在所有子目录makefile上自动调用make <target>

如何做这样的事情?

(注意:目录列表可以在变量中)

1 个答案:

答案 0 :(得分:0)

我终于找到了&#34;命令行目标参数&#34;被称为&#34;目标&#34;用make语言......

然后,很容易回答我的问题:

# get subdirs ($$ to escape the $ character)
# REC = $(shell find -maxdepth 1 -type d | sed -e '/^\.$$/ d' -e 's|\./||')
# As corrected by  Etan Reisner (Thank you !) :
REC = $(shell find -maxdepth 1 -mindepth 1 -printf '%P\n' -type d)

.PHONY: rec $(REC)

rec: $(REC)

$(REC):
    $(MAKE) $(MAKECMDGOALS) -C $@

# for implicit rules
%: rec

# for goals
$(MAKECMDGOALS) : rec

然后,任何目标都被转发到叶子,即使目标在这个Makefile中不存在,它也会在包含它的任何makefile中执行