Это не определение правила для создания цели с именем all default
.
Это определение двух правил для создания двух разных целей, одна из которых называется all
, а другая - default
. Несколько целей, разделенных пробелами в явном правиле, определяют одно и то же правило для каждой цели.
Также обратите внимание, что объявление цели .PHONY
не является обязательным. Обычно make будет работать одинаково независимо от того, будет ли цель помечена явно .PHONY
.
Маркировка цели .PHONY
имеет следующие преимущества: она немного более эффективна (но едва заметна), а если вам случится создать какой-нибудь файл или каталог с тем же именем, что и ваша цель, то он продолжит работать.
Другими словами, до тех пор, пока вы не создадите файл или каталог с именемall
или default
, тогда ваш make-файл будет работать правильно, даже если эти цели не объявлены .PHONY
.
Что касается вашего второго вопроса: нет, make-файлы не обрабатываются процедурно, как программы или сценарии оболочки.
Способ, которым он работает, заключается в том, что make сначала анализирует все make-файлы, включая make-файлы и т. Д., И строит внутренний график всех целей и их предпосылок. Затем, после того, как это сделано, он выбирает начальный узел на графике (либо тот, который вы запросили в командной строке, либо первый в make-файле) и начинает обходить график, создавая вещи, которые устарели.