Урок 1. Makefile: первая цель и рецепт - уроки для начинающих

На вводной странице курса мы выяснили, что
Makefile — это файл-манифест с командами, которые удобно
запускать через утилиту make. Теперь создадим такой файл сами
и выполним первую команду.

Создаём файл

Создайте где угодно папку для экспериментов, зайдите в неё и создайте файл
с именем Makefile — именно так, без расширения:

mkdir lesson01-hello
cd lesson01-hello
touch Makefile

Откройте файл в редакторе и запишите в него две строки:

hello:
	echo "Привет, мир!"

Важно: вторая строка начинается с символа TAB, а не с пробелов — ниже
скажу, почему это критично.

Теперь запустите в терминале из этой же папки:

make hello

И увидите:

echo "Привет, мир!"
Привет, мир!

Готово — утилита make прочитала файл, нашла цель
hello и выполнила её рецепт.

Как это устроено

В нашем файле:

  • hello: — цель (target), то есть имя команды,
    по которому мы её вызываем: make hello
  • строка ниже — рецепт (recipe): команды, которые выполняются
    при вызове цели

Обратите внимание: make сначала напечатал саму команду, а потом её
результат. Так и задумано — в одном из следующих уроков научимся «тихому»
режиму.

Главная ошибка новичка: пробелы вместо TAB

Рецепт обязан начинаться именно с TAB. Если вместо него вставить пробелы,
make откажется работать:

make hello
Makefile:2: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.

Про эту ошибку есть отдельная заметка с разбором.
Совет: включите в редакторе отображение непечатаемых символов — сразу
будет видно, где TAB, а где пробелы.

Задание

  1. Добавьте вторую цель, которая приветствует вас по имени, и выполните
    её.
  2. Замените в рецепте TAB на пробелы, запустите команду и посмотрите
    на ошибку. Верните TAB обратно.

В следующем уроке разберём, какая цель выполняется, если запустить
make без аргументов, и сделаем цель-справку. Полный план —
в списке уроков курса.

Пример этого урока лежит в репозитории:
lesson01-hello.