>_ IzzyLab

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

Пересборка только при изменении исходника

средне

В /root/proj лежит main.c. Напиши Makefile с целью app, которая зависит от main.c и собирается копированием (cp main.c app). Суть — в зависимости: make должен пересобирать app, только если main.c новее собранного app, и ничего не делать, если исходник не менялся.

Что потренируешь:
  • make
  • зависимости цели
  • инкрементальная сборка
  • mtime

Разбор темы

Ядро идеи make — инкрементальная сборка: цель пересобирается, только если устарела относительно своих зависимостей. Для этого цель объявляют с prerequisites (цель: зависимость), и make сравнивает время модификации (mtime): если зависимость новее цели или цели ещё нет — запускается рецепт, иначе make сообщает «up to date». Без объявленной зависимости make не с чем сравнивать mtime и он не сможет отслеживать изменения исходника.

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

  1. make собирает app из main.c
  2. без изменений app не пересобирается
  3. после изменения main.c app пересобирается

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