Что означает "все" в make файле?

Я прочитал несколько руководств, касающихся Make файлов, но для меня все еще неясно, для чего стоит цель "все" и что она делает.

Любые идеи?

Ответ 1

Построение, как понимает Makefile, состоит из множества целей. Например, для создания проекта вам может понадобиться

  • Сборка file1.o из файла file1.c
  • Сборка файла2.o из файла file2.c
  • Сборка файла3.o из файла file3.c
  • Скомпилируйте исполняемый файл1 из файла file1.o и file3.o
  • Сборка исполняемого файла2 из файла2.o

Если вы выполнили этот рабочий процесс с помощью makefile, вы можете сделать каждую из целей отдельно. Например, если вы написали

make file1.o

он при необходимости создаст только этот файл.

Название all не является фиксированным. Это просто условное название; all target означает, что если вы вызываете его, make будет создавать all, что необходимо для создания полной сборки. Обычно это фиктивная цель, которая не создает никаких файлов, а просто зависит от других файлов. В приведенном выше примере построение всего необходимого - это создание исполняемых файлов, другие файлы втягиваются как зависимости. Поэтому в make файле это выглядит так:

all: executable1 executable2

all target обычно является первым в make файле, так как если вы просто напишете make в командной строке, не указав цель, он построит первую цель. И вы ожидаете, что это будет all.

all обычно также является объектом .PHONY. Подробнее здесь.

Ответ 2

Руководство для GNU Make дает четкое определение для all в его списке стандартных целей.

Если автор Makefile выполняет это соглашение, целевой all должен:

  • Скомпилируйте всю программу, но не создайте документацию.
  • Укажите цель по умолчанию. Так как при запуске просто make должен делать то же самое, что и make all.

Достижение 1 all обычно определяется как цель .PHONY, которая зависит от исполняемого файла (ов), которые формируют всю программу:

.PHONY : all
all : executable

Для достижения 2 all должна быть либо первая цель, определенная в файле make, либо назначаемая как цель по умолчанию:

.DEFAULT_GOAL := all

Ответ 3

Не уверен, что это означает что-то особенное. Это просто соглашение о том, что вы поставляете правило "все", и обычно оно используется для перечисления всех подцелей, необходимых для построения всего проекта, отсюда и имя "все". Единственное, что особенно важно в этом, так это то, что люди часто ставят его в качестве первой цели в make файле, а это означает, что просто набрав "make", вы сделаете то же самое, что и "make all".

Ответ 4

Цель "все" - пример фиктивной цели - на диске нет ничего, называемого "все". Это означает, что когда вы делаете "делать все", всегда думайте, что ему нужно его построить, и поэтому выполняет все команды для этой цели. Эти команды, как правило, являются теми, которые создают все конечные продукты, о которых знает makefile, но они могут что-то делать.

Другие примеры фиктивных целей "чисты" и "устанавливаются", и они работают одинаково.

Если вы еще не прочитали его, вы должны прочитать GNU Make Manual, который также является отличным учебником.