Урок 7. Makefile: параметры командной строки и значение по умолчанию
Primary tabs
В уроке про переменные мы задавали значения прямо в Makefile. Но бывает нужно одно и то же действие выполнять чуть по-разному: собрать конфиг для окружения разработки или «боевого», поднять приложение на другом порту. Заводить отдельные цели под каждый вариант расточительно — вместо этого у make есть параметры командной строки.
Передаём параметр
Допишем к команде запуска ИМЯ=значение — и переменная в Makefile получит это значение на один запуск:
make show APP_ENV=prod PORT=9090
Смотрите, как читаются переменные — так же, как в уроке про переменные:
APP_ENV ?= dev PORT ?= 8080 show: @echo "Окружение: $(APP_ENV)" @echo "Порт: $(PORT)"
Запускаем без параметров:
make show Окружение: dev Порт: 8080
И с параметрами:
make show APP_ENV=prod PORT=9090 Окружение: prod Порт: 9090
Оператор ?= — значение по умолчанию
Запись APP_ENV ?= dev читается так: «взять dev, если APP_ENV ещё не задан» — например, не пришёл из командной строки. Это самый честный способ объявлять настройки: умолчание живёт в файле, а конкретный запуск может его переопределить.
Важно понимать: параметр действует только на этот запуск. Сам файл Makefile никак не меняется — следующий make show снова увидит dev.
Задание
- Объявите
NAME ?= мири сделайте цель-приветствие из первого урока параметризованной:make hello NAME=Васядолжно приветствовать Васю, а простоmake hello— «мир». - Добавьте в свой
showпеременнуюAPP_ENV— она ещё пригодится, когда в переиспользовании команд мы начнём работать с конфигами под разные окружения.
В следующем уроке воспользуемся всем накопленным: сгенерируем настоящий конфигурационный файл из переменных. Полный план — в списке уроков курса.
Про передачу параметров есть и справочная заметка. Пример этого урока лежит в репозитории: lesson07-args.
- Log in to post comments
- 4 reads