私のMakefileにはパターンルールがあります
%.out: %.in
myscript $< $@
quux.in
このルールは、ファイルまたはfoobar.in
が変更されたときだけでなく、ファイルquux/*
またはfoobar/*
(それぞれ) が変更されたときにもトリガーされるようにしたいと考えています。
(GNU) Makefile でそのような依存関係をどのように表現できますか?
私のMakefileにはパターンルールがあります
%.out: %.in
myscript $< $@
quux.in
このルールは、ファイルまたはfoobar.in
が変更されたときだけでなく、ファイルquux/*
またはfoobar/*
(それぞれ) が変更されたときにもトリガーされるようにしたいと考えています。
(GNU) Makefile でそのような依存関係をどのように表現できますか?
これはどう?次のような変数を使用することもできます。
DIR_LIST = quux foobar home france china mexico mars
%.out: %.in
myscript $< $@
$(foreach dir,${DIR_LIST},${dir})/%.out: $(foreach dir,${DIR_LIST},${dir})/%.in
myscript $< $@
OR.....
%.out: %.in
myscript $< $@
quux/%.out: quux/%.in
myscript $< $@
foobar/%.out: foobar/%.in
myscript $< $@
私はこの解決策を見つけました:
.SECONDEXPANSION:
%.out: %.in $$(call find, $(basename %), *)
my_script $< $@
find = $(foreach dir,$(1),$(foreach d,$(wildcard $(dir)/*),$(call find,$(d),$(2))) $(wildcard $(dir)/$(strip $(2))))
再帰ワイルドカードfind
関数はhttps://plus.google.com/101663514639216293981/posts/h5Xr1i8kgfuから来ています。