在我的 Makefile 我有一个模式规则
%.out: %.in
myscript $< $@
我希望这个规则不仅在文件quux.in
或被foobar.in
修改时触发,而且在任何文件quux/*
或foobar/*
(分别)被修改时触发。
如何在(GNU)Makefile 中表达这种依赖?
在我的 Makefile 我有一个模式规则
%.out: %.in
myscript $< $@
我希望这个规则不仅在文件quux.in
或被foobar.in
修改时触发,而且在任何文件quux/*
或foobar/*
(分别)被修改时触发。
如何在(GNU)Makefile 中表达这种依赖?
我找到了这个解决方案:
.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。
这个怎么样?你甚至可以有一个像这样的变量:
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 $< $@