Я читал несколько руководств по Makefile, но мне все еще неясно, что означает цель «все» и что она делает.
Любые идеи?
Сборка, как ее понимает Makefile, состоит из множества целей. Например, для создания проекта вам может потребоваться
Если вы реализовали этот рабочий процесс с помощью make-файла, вы могли бы создать каждую из целей отдельно. Например, если вы написали
make file1.o
он будет строить этот файл только в случае необходимости.
Имя all
не зафиксировано. Это просто условное имя; all
target означает, что если вы его вызовете, make соберет все, что необходимо для создания полной сборки . Обычно это фиктивная цель, которая не создает никаких файлов, а просто зависит от других файлов. Для приведенного выше примера сборка всего необходимого - это сборка исполняемых файлов, а другие файлы втягиваются как зависимости. Итак, в make-файле это выглядит так:
all: executable1 executable2
all
target обычно является первым в make-файле, так как если вы просто напишете make
в командной строке, не указывая цель, она построит первую цель. И вы этого ожидаете all
.
all
обычно также является .PHONY
целью. Узнайте больше здесь .
Руководство по GNU Make дает четкое определение all
в своем списке стандартных целей .
Если автор Makefile следует этому соглашению, цель all
должна:
make
нужно делать то же самое, что и make all
.Достижение 1 all
обычно определяется как .PHONY
цель, которая зависит от исполняемых файлов, которые формируют всю программу:
.PHONY : all
all : executable
Для достижения 2 all
должна быть либо первая цель, определенная в файле make, либо назначенная как цель по умолчанию:
.DEFAULT_GOAL := all
Не уверен, что это означает что-то особенное. Это просто соглашение, согласно которому вы предоставляете правило «все», и обычно оно используется для перечисления всех подцелей, необходимых для создания всего проекта, отсюда и название «все». Единственная особенность в этом заключается в том, что часто люди помещают его в качестве первой цели в make-файле, а это означает, что простой ввод «make» будет делать то же самое, что и «make all».
Цель «все» - это пример фиктивной цели - на диске нет ничего, что называется «все». Это означает, что когда вы выполняете команду «make all», make всегда думает, что ей необходимо ее построить, и поэтому выполняет все команды для этой цели. Как правило, эти команды создают все конечные продукты, о которых знает make-файл, но они могут делать что угодно.
Другими примерами фиктивных целей являются «очистить» и «установить», и они работают таким же образом.
Если вы еще не читали его, вам следует прочитать Руководство GNU Make Manual , которое также является отличным учебным пособием.