Урок 4. Makefile: переменные

В живых Makefile-ах одни и те же значения — имя приложения, номер порта, путь к конфигам — встречаются в команде за командой. Переписывать их каждый раз утомительно и опасно: забыли поменять в одном месте, и настройки «разъехались». Решение — переменные.

Объявляем и используем

Переменная объявляется строкой вида ИМЯ = значение, а подставляется в рецепт как $(ИМЯ):

APP_NAME = my-app
PORT = 8080
CONFIG_DIR = config

show:
	@echo "Приложение: $(APP_NAME)"
	@echo "Порт:       $(PORT)"
	@echo "Конфиги:    $(CONFIG_DIR)/"

Запускаем и получаем:

make show
Приложение: my-app
Порт:       8080
Конфиги:    config/

Теперь, чтобы сменить порт, правим одну строку вверху файла — и все команды, где используется $(PORT), подхватят новое значение. В этом и смысл: значение живёт в одном месте.

Пара деталей

Имена переменных принято писать заглавными буквами — это традиция, а не требование, но так ваши файлы будут читаться как «родные». Писать значения можно и маленькими буквами, если это, например, обычный текст, а не «константа».

И ещё: make просто подставляет текст переменной в команду перед её запуском. Никакой магии — echo "Порт: $(PORT)" превращается в echo "Порт: 8080", и уже её выполняет оболочка.

А @ в рецептах нам уже знаком из урока про тихий вывод.

Задание

  1. Объявите переменную AUTHOR со своим именем и добавьте цель, которая приветствует вас по имени — как hello из первого урока, но уже с переменной.
  2. Поменяйте значение PORT и выполните make show — убедитесь, что вывелось новое значение, хотя рецепт вы не трогали.

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

Подробнее о переменных — в справочной заметке. Пример этого урока лежит в репозитории: lesson04-variables.