Урок 6. Makefile: зависимости — одна цель после другой
Primary tabs
В уроке про переиспользование команд мы вызывали одну заготовку из разных целей. Теперь научимся выстраивать сами цели в цепочки: часто командам нужен «разогрев» — перед сборкой создать каталог, а пересборка — это вообще две операции: сначала убрать старое, потом собрать новое. Можно запускать две команды руками (make clean, затем make build), но make умеет делать это сам — через зависимости.
Зависимость: цель перед целью
Допишем после имени цели через двоеточие имя другой цели — и она выполнится первой:
build: prepare @echo "2. Собираем конфиг out/app.conf" @echo "# собрано командой make" > out/app.conf prepare: @echo "1. Готовим каталог out/" @mkdir -p out
Читается так: «для build сначала нужен prepare». Запускаем:
make build 1. Готовим каталог out/ 2. Собираем конфиг out/app.conf
Порядок виден по номерам в сообщениях: сначала зависимость, потом сама цель.
Несколько зависимостей
Зависимостей может быть несколько — перечислим их через пробел. Классическая пара «пересборка»:
rebuild: clean build @echo "3. Пересборка завершена" clean: @echo "0. Чистим каталог out/" @rm -rf out
Теперь make rebuild — это вся цепочка сразу:
make rebuild 0. Чистим каталог out/ 1. Готовим каталог out/ 2. Собираем конфиг out/app.conf 3. Пересборка завершена
Правила простые: сначала выполняются все зависимости слева направо, а рецепт самой цели — в самом конце. Один запуск — четыре шага, и порядок гарантирован.
У механизма есть и справочная заметка про вызов одной команды после другой, и про вызов перед данной — это ровно про него.
Задание
- Добавьте цель
show, зависящую отbuildи выводящую содержимоеout/app.conf. Проверьте, чтоmake showсам собирает конфиг, если тот ещё не создан. - Поменяйте в
rebuildпорядок зависимостей наbuild cleanи запустите — объясните себе, почему результат получился «испорченным».
В следующем уроке научимся передавать целям параметры: make config APP_ENV=prod. Полный план — в списке уроков курса.
Пример этого урока лежит в репозитории: lesson06-deps.
- Log in to post comments
- 5 reads