Урок 9. Makefile: цветной вывод и export
Primary tabs
Наши сообщения в тихом режиме пока монохромные. Между тем цвет — дешёвый способ сделать справку и уведомления читабельными: зелёным — успех, жёлтым — предупреждение, бирюзовым — заголовки. Разберёмся, как красить текст, и попутно выясним, зачем в Makefile-ах пишут export.
Цвета через tput
Коды цветов терминалу отдаёт утилита tput: команда tput setaf N переключает цвет, tput sgr0 — сбрасывает оформление. Попробуйте прямо в консоли:
echo "Обычный и `tput setaf 2`зелёный`tput sgr0`"
Слово «зелёный» окрасится. Часто используемые номера: 1 — красный, 2 — зелёный, 3 — жёлтый, 6 — бирюзовый.
Цвета в Makefile
Объявим цвета переменными и используем в сообщениях:
export cyan = `tput setaf 6`
export green = `tput setaf 2`
export yellow = `tput setaf 3`
export reset = `tput sgr0`
hello:
@echo "${cyan}Привет!)${reset}"
done:
@echo "${yellow}Внимание:${reset} почти готово"
@echo "${green}Готово!${reset}"
Запускаем:
make done Внимание: почти готово Готово!
В терминале «Внимание:» будет жёлтым, «Готово!» — зелёным. Фигурные скобки ${cyan} — та же подстановка переменной, что $(cyan), просто с цветами так привычнее читать.
Зачем export
Обычная переменная make живёт только внутри самого make: её значение подставляется в текст команд перед запуском. А слово export превращает её ещё и в переменную окружения — она передаётся всем запускаемым командам, включая ваши скрипты и утилиты, которые умеют читать настройки из окружения.
Проверить легко — заглянем в окружение из рецепта:
env.check: @env | grep cyan
make env.check cyan=`tput setaf 6`
Переменная на месте. А теперь удалите слово export у cyan и повторите — grep уже ничего не найдёт: в окружении переменной нет, она осталась «внутренней» для make.
Задание
- Раскрасьте свою цель-справку из урока про несколько целей: имена команд — одним цветом, описания оставьте обычными.
- Покажите в своём Makefile, что
export-переменная видна в окружении, а обычная — нет (приём сenv | grepвыше).
В следующем уроке — главная идея make: цели-файлы, ради которых всё и затевалось полвека назад. Полный план — в списке уроков курса.
Про цветной вывод есть заметка про echo и цвета, а про окружение — заметка про вывод переменных окружения. Пример урока лежит в репозитории: lesson09-colors.
- Log in to post comments
- 5 reads