我想写一个通用的make文件。
例如,给定一个这样的树:
/
|-Makefile
|-Foo
| |-Makefile
| |-Foo1
| | |-Makefile
| | |-Foo11
| |-Foo2
| |-Makefile
|-Bar
| |-Makefile
| |-Bar1
| | |-Makefile
| | |-Bar11
| | | |-Makefile
| |-Bar2
| | |-Makefile
|
我希望通过在根makefile上调用make <target>
,它会在所有子目录makefile上自动调用make <target>
如何做这样的事情?
(注意:目录列表可以在变量中)
答案 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中执行