Рассмотрим следующее упрощенное Makefile
:
target :
(recipe)
target-mt : (add some flags)
target-mt : target
Этот пример работает как задумано: make target-mt
добавляет несколько флагов и приступает к компиляции target
.
Теперь, так как шаблон *-mt
встречается довольно часто, с всегда одинаковыми флагами, я хочу, чтобы это усилие было распространено. Итак, давайте упростим с помощью правила шаблона Makefile :
target :
(recipe)
%-mt : (add some flags)
target-mt : target
Это работает как задумано, и теперь все более поздние цели *-mt
получают такой же дополнительный набор флагов. Теперь обратите внимание, что зависимость something-mt
всегда равна something
. Так что у меня возникает соблазн обобщить это отношение еще больше:
target :
(recipe)
%-mt : (add some flags)
%-mt : %
Это не работает .
make: *** No rule to make target `target-mt'. Stop.
Это кажется странным с общей формулировкой шаблонных правил, таких как канонический пример:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
Я предполагаю, что должна быть причина этого сбоя, и я предполагаю, что это может быть связано с тем фактом, что зависимость является чистой %
, не что-то более определенное, как %.c
. Но я не смог найти ничего связанного с таким ограничением в документации (ссылка выше).
Вопросы:
1) Есть ли объяснение этому поведению?
2) Есть ли другой способ достичь той же цели?