Что “все” поддерживают в make-файле?

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

Какие-либо идеи?

97
задан nbro 15 May 2016 в 22:24
поделиться

3 ответа

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

  1. Собрать файл1.o из file1.c
  2. Собрать файл2.o из file2.c
  3. Собрать файл3.o из file3.c
  4. Собрать Execute1 из file1.o и file3.o
  5. Скомпилировать исполняемый файл2 из file2.o

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

make file1.o

, он построил бы этот файл только в случае необходимости.

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

all: executable1 executable2

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

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

109
ответ дан 24 November 2019 в 05:28
поделиться

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

2
ответ дан 24 November 2019 в 05:28
поделиться

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

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

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

1
ответ дан 24 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: