带有类别的makefile

带有类别的makefile,makefile,Makefile,想象一下,我的脑海中有一些文件被分类了,但无法用任何命名方案来区分,它们位于同一个目录中: apple cherry celery onion 我有两条规则,一条做馅饼,一条做汤 如果我将这些配方作为隐式规则实施: fruits:= apple cherry vegetables:= celery onion %.soup : % @echo "making soup" cp $< $@ %.pie : % @echo "making

想象一下,我的脑海中有一些文件被分类了,但无法用任何命名方案来区分,它们位于同一个目录中:

apple cherry celery onion
我有两条规则,一条做馅饼,一条做汤

如果我将这些配方作为隐式规则实施:

fruits:= apple cherry
vegetables:= celery onion

%.soup : %
        @echo "making soup"
        cp $< $@

%.pie : %
        @echo "making pie"
        cp $< $@
fruits:= apple cherry
vegetables:= celery onion

pies:=$(addsuffix .pie,$(fruits))
soups:=$(addsuffix .soup,$(vegetables))

$(pies) : $(fruits)
        @echo "making pie"
        cp $< $@


$(soups) : $(vegetables)
        @echo "making soup"
        cp $< $@
但如果我使用明确的规则:

fruits:= apple cherry
vegetables:= celery onion

%.soup : %
        @echo "making soup"
        cp $< $@

%.pie : %
        @echo "making pie"
        cp $< $@
fruits:= apple cherry
vegetables:= celery onion

pies:=$(addsuffix .pie,$(fruits))
soups:=$(addsuffix .soup,$(vegetables))

$(pies) : $(fruits)
        @echo "making pie"
        cp $< $@


$(soups) : $(vegetables)
        @echo "making soup"
        cp $< $@
如何告知文件类别的Make?

使用:

水果:=苹果樱桃
蔬菜:=芹菜洋葱
$(蔬菜:%=%.汤):%.汤:%
@回声“煲汤”
cp$<$@
$(水果:%=%.馅饼):%.馅饼:%
@回应“做馅饼”
cp$<$@
使用:

水果:=苹果樱桃
蔬菜:=芹菜洋葱
$(蔬菜:%=%.汤):%.汤:%
@回声“煲汤”
cp$<$@
$(水果:%=%.馅饼):%.馅饼:%
@回应“做馅饼”
cp$<$@
fruits:= apple cherry
vegetables:= celery onion

$(vegetables:%=%.soup) : %.soup : %
        @echo "making soup"
        cp $< $@

$(fruits:%=%.pie) : %.pie : %
        @echo "making pie"
        cp $< $@