Урок 2. Makefile: несколько целей и цель по умолчанию
Primary tabs
Forums:
В первом уроке мы создали Makefile с одной целью hello, а в задании добавили к ней вторую. Целей в файле может быть сколько угодно — сейчас разберёмся, как make выбирает, что именно выполнять.
Несколько целей
Дополним наш файл ещё двумя целями:
hello: echo "Привет, мир!" date: date help: echo "make hello - поприветствовать мир" echo "make date - показать дату и время" echo "make help - эта справка"
Каждая цель — отдельная «команда». Цель date просто выполняет одноимённую команду date — имя цели и имя команды могут совпадать, путаницы не возникнет:
make date date Пн 26 окт 2026 19:46:42 MSK
Цель по умолчанию
А что будет, если запустить make без аргументов? Выполнится первая цель файла — у нас это hello:
make echo "Привет, мир!" Привет, мир!
Правило простое: цель по умолчанию — первая описанная в Makefile, и выполняется только она одна. Остальные цели запускаются лишь по имени: make date.
Цель-справка
Когда целей становится много, помнить их все уже сложно. Хорошая практика — завести цель help (её же называют about), которая печатает список доступных команд:
make help echo "make hello - поприветствовать мир" make hello - поприветствовать мир echo "make date - показать дату и время" make date - показать дату и время echo "make help - эта справка" make help - эта справка
Работает, но шумновато: перед каждой строкой вывода печатается сама команда. Так и задумано — в следующем уроке познакомимся с символом @ и сделаем вывод чистым.
Именно поэтому в больших проектах первой целью часто делают справку: набрал make — и сразу видно, что вообще можно сделать.
Задание
- Добавьте в свой файл цель
dateи цель-справкуhelp(илиabout) с описанием всех команд. - Переставьте цели так, чтобы запуск
makeбез аргументов показывал справку. - Запустите несуществующую цель, например
make foo, и посмотрите, что ответит make.
В следующем уроке разберём символ @ и «тихий» вывод. Полный план — в списке уроков курса.
Пример этого урока лежит в репозитории: lesson02-targets.
- Log in to post comments
- 6 reads