Урок 3. Makefile: символ @ и тихий вывод
Primary tabs
Forums:
Во втором уроке мы заметили, что цель 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 есть и отдельная заметка.
Задание
- Почистите справку
help(илиabout) из второго урока: добавьте@перед всемиecho. - Уберите
@из какой-нибудь цели и запустите её сmake -s— убедитесь, что вывод стал тихим без правки файла.
В следующем уроке познакомимся с переменными — начнём выносить повторяющиеся значения в одно место. Полный план — в списке уроков курса.
Подробности про символ @ — в справочной заметке. Пример этого урока лежит в репозитории: lesson03-quiet.
- Log in to post comments
- 9 reads