>_ IzzyLab

Практическое задание

Заставь clean работать через .PHONY

средне

В /root/proj есть артефакт сборки build.out и — так уж вышло — обычный файл с именем clean. Напиши Makefile с целью clean, которая удаляет build.out. Загвоздка: из-за того что рядом лежит файл clean, наивная цель clean будет считаться «уже собранной» и рецепт не выполнится. Сделай так, чтобы make clean всегда отрабатывал и удалял build.out, несмотря на файл-тёзку.

Что потренируешь:
  • make
  • .PHONY
  • псевдо-цели
  • makefile
  • имя цели как файл

Разбор темы

make трактует имя цели как имя файла: если рядом лежит одноимённый файл и он не «устарел» относительно зависимостей, make считает цель собранной, говорит up to date и рецепт не запускает. Служебные цели, которые не производят одноимённый файл (clean, all, test), из-за этого могут молча не отработать. Лекарство — объявить их специальной псевдо-целью, помечающей цель как «всегда выполнять рецепт» независимо от наличия файла-тёзки.

Что проверяется

  1. make clean удаляет build.out
  2. файл clean на месте

Как это выглядит