Урок 8. Makefile: генерация конфига из переменных
Primary tabs
До сих пор наши цели только печатали текст в терминал. Пора сделать что-то настоящее: сгенерировать файл конфигурации — тем самым соединим всё, что уже умеем: переменные, вынесенные в них команды и цели из урока про зависимости.
Перенаправление вывода: > и >>
Трюк не make, а самой оболочки командной строки: вывод команды можно отправить в файл. Один символ > записывает строку в файл (создавая новый или затирая старый), два — >> — дописывают в конец:
echo "первая строка" > file.txt echo "вторая строка" >> file.txt
Генерируем конфиг
Соберём цель, которая создаёт config/app.conf построчно:
APP_NAME = my-app PORT = 8080 DEBUG = true CONFIG = config/app.conf generate: @mkdir -p config @echo "# конфиг приложения $(APP_NAME)" > $(CONFIG) @echo "port = $(PORT)" >> $(CONFIG) @echo "debug = $(DEBUG)" >> $(CONFIG) @echo "Создан файл $(CONFIG)"
Запускаем:
make generate Создан файл config/app.conf
Обратите внимание: первая строка с > создаёт файл заново, а остальные дописываются >>. Если бы везде стоял >, в файле осталась бы только последняя строка — попробуйте, это полезное «чувство».
Показать и убрать
Дополним парой целей, которые нам уже знакомы:
show: @cat $(CONFIG) clean: @rm -f $(CONFIG) @echo "Удалён файл $(CONFIG)"
Проверяем всё вместе:
make show # конфиг приложения my-app port = 8080 debug = true make clean Удалён файл config/app.conf
Пара show/clean — классика: почти в любом рабочем Makefile вы встретите именно такие имена.
Задание
- Добавьте в генерируемый конфиг настройку
log_levelсо своим значением. - Сделайте порт настраиваемым при запуске —
make generate PORT=9090должен писать в конфиг новый порт, не правя файл (приём из урока про параметры командной строки).
В следующем уроке раскрасим сообщения в терминале цветом и разберёмся, чем export-переменная отличается от обычной. Полный план — в списке уроков курса.
Пример этого урока лежит в репозитории: lesson08-generate.
- Log in to post comments
- 6 reads