GNU Сделать версию 3.81 введена специальная переменная с именем .DEFAULT_GOAL, которая может использоваться для указания Make, какая цель (или цель) должна быть построена, если в командной строке не указана цель. В противном случае Make просто сделает первую цель, с которой он сталкивается.Является ли пустая цель правильной жизнеспособной заменой .DEFAULT_GOAL в GNU Make?
Рассмотрим:
bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
С выше гипотетической Makefile, запуск make
будет строить «бар», потому что это первая цель, сделать встречи. Но если мы добавим .DEFAULT_GOAL, как так ...
.DEFAULT_GOAL := foo # Build foo by default, even if it's not first. bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
... затем сделать (версия 3.81) будет строить "Foo", если мы управляем только make
.
Я нашел эту переменную .DEFAULT_GOAL весьма полезной в модульной, повторно используемой «фреймворке» Makefile, которую я создал. Тем не менее, я считаю, что многие системы по-прежнему имеют GNU Make 3,80 или более старые, и они не поддерживают эту переменную.
В то время как играть с вещами, я заметил, что просто указать пустой целевой правило, кажется, имеет тот же эффект, как и .DEFAULT_GOAL, даже на предварительно 3,81-версии GNU Make:
foo: # Empty target rule bar: a b c ${MAKE_BAR_COMMANDS} foo: x y z ${MAKE_FOO_COMMANDS}
Я знаю, что это является действительным и законным для добавления к целевым правилам и/или предварительным требованиям путем указания дополнительных целевых правил таким образом. Тем не менее, мне интересно, может ли это сделать некоторые потенциально нежелательные побочные эффекты, которые не возникают при использовании .DEFAULT_GOAL.
Я думаю, мне осталось интересно, почему. DEFAULT_GOAL был введен, если вы можете достичь того же самого элемента с помощью простого пустого правила. Это заставляет меня подозревать, что они, возможно, не приводят к точно так же, как и к.
Итак, основные вопросы: есть ли внешне различимая разница между использованием .DEFAULT_GOAL и пустым целевым правилом?