Как приложение "make" знает цель по умолчанию для сборки, если не указана цель?

Большинство приложений Linux скомпилированы с помощью:

make
make install clean

Как я понял, make принимает имена целей сборки в качестве аргументов. Таким образом, install - это цель, которая копирует некоторые файлы, и после этого clean является целью, удаляющей временные файлы.

Но какая цель будет make строить, если аргументы не указаны (например, первая команда в моем примере)?

Ответ 1

По умолчанию он начинается с обработки первой цели, которая не начинается с . или цели по умолчанию; для этого может потребоваться обработка других целей, в частности тех, от которых зависит первая цель.

GNU Make Manual охватывает все эти вещи и удивительно легко и информативно читается.

Ответ 2

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

.DEFAULT_GOAL := mytarget

mytarget теперь будет целью, которая запускается, если выполняется "make" и не указана цель.

Если у вас установлена ​​более старая версия make (< = 3,80), это не сработает. Если это так, то вы можете сделать то, что упоминает anon, просто добавьте это в верхнюю часть вашего файла make:

.PHONY: default
default: mytarget ;

Литература: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html

Ответ 3

GNU Make также позволяет вам указать цель make по умолчанию, используя специальную переменную с именем .DEFAULT_GOAL. Вы даже можете сбросить эту переменную в середине файла Makefile, в результате чего следующая цель в файле станет целью по умолчанию.

Ссылка: Руководство по Gnu Make - Специальные переменные