Представьте, что у меня есть файлы, которые классифицированы в моей голове, но не могут быть различены по какой-либо схеме именования, и они находятся в одном каталоге:
apple cherry celery onion
У меня есть два правила: один рецепт для пирога и один для супа.
Если я реализую эти рецепты как неявные правила:
fruits:= apple cherry
vegetables:= celery onion
%.soup : %
@echo "making soup"
cp $< $@
%.pie : %
@echo "making pie"
cp $< $@
Тогда я позволю себе приготовить ужасную еду:
> touch celery
> make celery.pie
making pie
cp celery celery.pie #bleech this should not be allowed
Но если я использую явные правила:
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 $< $@
Я вынужден установить зависимости, которых нет на самом деле:
> touch apple
> make apple.pie
make: *** No rule to make target `cherry', needed by `apple.pie'. Stop.
Как я могу сказать Make о категориях файлов?