具有不同依赖关系的模式规则

时间:2013-07-19 16:25:45

标签: makefile

在我的Makefile中,我有一个模式规则

%.out: %.in
        myscript $< $@

我希望不仅在文件quux.infoobar.in被修改时,而且在任何文件quux/*foobar/*(分别)时,都会触发此规则被修改。

如何在(GNU)Makefile中表达这种依赖?

2 个答案:

答案 0 :(得分:0)

这个怎么样?你甚至可以有一个变量:

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

答案 1 :(得分:0)

我找到了这个解决方案:

.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