Как пользоваться
- Выберите тип проекта и введите имя программы.
- Отметьте нужные цели. Сначала включены все, кроме
lint. - Скопируйте результат в файл
Makefileв корне проекта. - Запускайте
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 && команда.