Makefile: шаблонное правило как первое правило - PullRequest
0 голосов
/ 20 февраля 2019

Я знаю, что make обычно выполняет первую цель, если вызывается без каких-либо аргументов.Но что произойдет, если первая цель - это шаблонное правило?Здесь у меня есть Makefile, который выглядит следующим образом:

%.o: %.cc
        gcc -c -o $@ $<
main: main.o helper.o
        gcc main.o helper.o -o $@

Из моего понимания make, просто вызывая его без каких-либо аргументов, вероятно, в этом случае может произойти какая-то ошибка, потому что первая цель, насколько я понял всегда цель по умолчанию, не имеет смысла, если make не дано никаких аргументов.Но когда я вызываю make с этим Makefile, он вместо этого строит цель main (и, конечно, также рекурсивно цели main.o и helper.o).Итак, действительно ли всегда верно, что make будет игнорировать правила шаблона при поиске первой цели?И считается ли это каким-то плохим стилем ставить тех, кто стоит перед целью, которые действительно хотят быть по умолчанию?На мой взгляд, это как-то сбивает с толку.

1 Ответ

0 голосов
/ 20 февраля 2019

Из GNU make manual :

Порядок правил незначителен, за исключением определения цели по умолчанию: цель для make, которую нужно рассмотреть, если вы этого не сделаетев противном случае укажите один.Целью по умолчанию является цель первого правила в первом make-файле.Если первое правило имеет несколько целей, по умолчанию принимается только первая цель.Есть два исключения: цель, начинающаяся с точки, не является значением по умолчанию, если она не содержит одну или несколько косых черт, также '/';и цель, которая определяет правило шаблона, не влияет на цель по умолчанию.(См. Определение и переопределение правил шаблона.)

...