Я прочитал несколько руководств, касающихся Make файлов, но для меня все еще неясно, для чего стоит цель "все" и что она делает.
Любые идеи?
Я прочитал несколько руководств, касающихся Make файлов, но для меня все еще неясно, для чего стоит цель "все" и что она делает.
Любые идеи?
Построение, как понимает Makefile, состоит из множества целей. Например, для создания проекта вам может понадобиться
Если вы выполнили этот рабочий процесс с помощью makefile, вы можете сделать каждую из целей отдельно. Например, если вы написали
make file1.o
он при необходимости создаст только этот файл.
Название all
не является фиксированным. Это просто условное название; all
target означает, что если вы вызываете его, make будет создавать all, что необходимо для создания полной сборки. Обычно это фиктивная цель, которая не создает никаких файлов, а просто зависит от других файлов. В приведенном выше примере построение всего необходимого - это создание исполняемых файлов, другие файлы втягиваются как зависимости. Поэтому в 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".
Цель "все" - пример фиктивной цели - на диске нет ничего, называемого "все". Это означает, что когда вы делаете "делать все", всегда думайте, что ему нужно его построить, и поэтому выполняет все команды для этой цели. Эти команды, как правило, являются теми, которые создают все конечные продукты, о которых знает makefile, но они могут что-то делать.
Другие примеры фиктивных целей "чисты" и "устанавливаются", и они работают одинаково.
Если вы еще не прочитали его, вы должны прочитать GNU Make Manual, который также является отличным учебником.