Урок 3. Makefile: символ @ и тихий вывод

Во втором уроке мы заметили, что цель help печатает сначала саму команду echo, а потом её результат — вывод получается шумным. Разберёмся, зачем make так делает и как это починить.

Почему make печатает команды

По умолчанию make перед выполнением печатает каждую команду рецепта. Это не случайность: когда рецепты длинные, по выводу видно, что именно происходит и на каком шаге всё сломалось. Для отладки — ценно, для ежедневной работы — шумно.

Символ @

Поставьте @ перед командой в рецепте — и make выполнит её как обычно, но саму команду печатать не будет. Сравните две цели:

noisy:
	echo "Видно и команду, и результат"

quiet:
	@echo "Виден только результат"

Запускаем:

make noisy
echo "Видно и команду, и результат"
Видно и команду, и результат

make quiet
Виден только результат

В первом случае видны и команда, и результат, во втором — только результат.

Важно: @ ставится перед каждой строкой рецепта отдельно — одна собака не «заглушает» всю цель.

Чистим справку из прошлого урока

Теперь легко сделать цель help из урока про несколько целей аккуратной — добавим @ всем строкам:

help:
	@echo "make hello - поприветствовать мир"
	@echo "make date  - показать дату и время"
	@echo "make help  - эта справка"

И вывод становится чистым:

make help
make hello - поприветствовать мир
make date  - показать дату и время
make help  - эта справка

Именно так пишут настоящие Makefile-ы: у сообщений для человека стоит @, а команды, за которыми интересно следить, оставляют «громкими».

Тихий режим всего запуска

Если команды нужно спрятать разом, не трогая файл, запустите make -s (от silent): тогда make не будет печатать ни одной команды — как если бы перед каждой стоял @. Про скрытие служебных сообщений make есть и отдельная заметка.

Задание

  1. Почистите справку help (или about) из второго урока: добавьте @ перед всеми echo.
  2. Уберите @ из какой-нибудь цели и запустите её с make -s — убедитесь, что вывод стал тихим без правки файла.

В следующем уроке познакомимся с переменными — начнём выносить повторяющиеся значения в одно место. Полный план — в списке уроков курса.

Подробности про символ @ — в справочной заметке. Пример этого урока лежит в репозитории: lesson03-quiet.