>_ IzzyLab

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

Order-only зависимость: каталог для артефактов

сложно

Артефакты сборки должны лежать в подкаталоге out/, которого изначально нет. Напиши Makefile с целью out/app, которая собирает app из main.c (cp) внутрь out/. Каталог out создавай автоматически, но объяви его order-only зависимостью (после символа |) — чтобы изменение времени каталога не вызывало лишних пересборок out/app.

Что потренируешь:
  • make
  • order-only зависимости
  • mtime
  • каталог артефактов

Разбор темы

Обычная зависимость заставляет make смотреть на время модификации prerequisite, но у каталога mtime меняется при любой правке его содержимого — из-за чего цель постоянно считалась бы устаревшей. Для таких случаев есть order-only зависимости: всё, что стоит после символа |, make лишь гарантирует существующим, но не учитывает его время при решении о пересборке. Это стандартный приём — автоматически создавать каталог для артефактов, не провоцируя лишние пересборки.

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

  1. out/app собран внутри каталога out
  2. изменение времени каталога не пересобирает out/app

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