EMZETT.
Войти

Основы Makefile

Коротко: Makefile описывает, какие файлы из каких получаются и какими командами. make затем пересобирает только устаревшее.

Подробнее: Инструмент родом из 1970-х, но широко используется и сегодня, в том числе как простой запускатель задач для проектов на любом языке.

Подробности

  • Правило: цель: зависимости и ниже, с отступом табуляцией, команды.
program: main.o util.o
	cc -o program main.o util.o
 
%.o: %.c
	cc -c $< -o $@
  • Переменные: $@ (цель), $< (первая зависимость), $^ (все). Свои вроде CC=gcc.
  • Актуальность: make сравнивает времена изменения. Собираются только цели с более новыми зависимостями.
  • .PHONY: Цели без файла, такие как test или clean, объявляют так, чтобы одноимённый файл их не блокировал.
  • Параллельно: make -j8 собирает независимые цели одновременно.
  • Ловушки: Пробелы вместо табуляции, каждая строка команды выполняется в отдельной оболочке.
  • Альтернативы: CMake, Ninja, Just, Task. См. зависимости и библиотеки.

См. также: воспроизводимые сборки