Генератор Makefile

Выберите стек и нужные цели — и скопируйте Makefile с настоящими табуляциями в рецептах. Тогда make, make test и make clean работают одинаково в любом проекте, какие бы инструменты ни стояли за ними.

Исполняемый файл, модуль Python или просто имя. Только латиница, цифры, . _ -

Сохраните как Makefile (без расширения) в корне проекта. Строки рецептов начинаются с табуляции — сохраните её при правке и вставке.

Работает в браузере: всё, что вы вводите, никуда не отправляется.

Как пользоваться

  1. Выберите тип проекта и введите имя программы.
  2. Отметьте нужные цели. Сначала включены все, кроме lint.
  3. Скопируйте результат в файл Makefile в корне проекта.
  4. Запускайте make, make test, make clean или make help.

Как это работает

В файле три части:

  • Переменные: инструменты через ?=, чтобы их можно было переопределить (CC ?= cc, GO ?= go, NPM ?= npm, PYTHON ?= python3), и имя программы через :=.
  • .PHONY: все выбранные цели, чтобы одноимённые файлы не мешали.
  • Цели: строка правила и одна или несколько строк рецепта с отступом табуляцией. Для C цель build зависит от $(TARGET), который собирается из объектных файлов, а шаблонное правило %.o: %.c компилирует каждый исходник из src/.

Цель help печатает имена целей, найденные в самом Makefile через grep, поэтому список остаётся верным, когда вы добавляете цели.

Пример

Настройки по умолчанию (Go, имя app) дают:

GO ?= go
BINARY := app

.PHONY: build test run install clean help

build:
	$(GO) build -o bin/$(BINARY) .

test:
	$(GO) test ./...

run:
	$(GO) run .

install:
	$(GO) mod download

clean:
	rm -rf bin

help:
	@grep -E '^[a-zA-Z_-]+:' $(MAKEFILE_LIST) | cut -d: -f1

Советы

  • Символ @ в начале строки рецепта скрывает саму команду и оставляет только её вывод.
  • Для знака доллара, который должна увидеть оболочка, пишите $$: одиночный $ принадлежит make.
  • Каждая строка рецепта выполняется в отдельной оболочке, поэтому cd dir в одной строке не действует на следующую — пишите cd dir && команда.

Частые вопросы

Почему строки рецептов должны начинаться с табуляции?

По символу табуляции make отличает команды от правил. С пробелами будет ошибка «missing separator». В сгенерированном файле настоящие табуляции, но некоторые редакторы при вставке превращают их в пробелы — проверьте настройку.

Зачем нужен .PHONY?

Он сообщает make, что цель — название действия, а не файл. Без него файл или папка test или build в проекте заставят make решить, что цель уже выполнена, и пропустить её.

Какая цель выполняется по команде make без аргументов?

Первая в файле. Генератор ставит build первой, поэтому make собирает проект. Правила компоновки и компиляции для C идут после build, чтобы не стать целью по умолчанию.

Что означает ?=?

Присвоить значение, только если переменная ещё не задана. Так её можно переопределить из командной строки или окружения: make CC=clang или GO=go1.22 make test.

Что делает install?

Для C копирует программу в $(DESTDIR)$(PREFIX)/bin, по умолчанию /usr/local/bin, как принято у Unix-программ. Для Go, Node.js и Python ставит зависимости: go mod download, npm ci, pip install -r requirements.txt.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.