Ramblings of an aging IT geek
← Ramblings of an aging IT geek
tooling

the makefile is just a list of things i keep forgetting

Why a humble Makefile earns its place in projects that have nothing to do with C, as the one obvious file where every project command lives.

A keyboard beside a terminal showing make targets

There is no C in this project. There is Python, some YAML, a sprawl of shell, and a Makefile, and the Makefile is the best documentation in the repository. Not because it compiles anything, it compiles nothing, but because it is the one file everyone already knows to open, and it answers the only question a newcomer actually has: how do I run this thing?

.PHONY: install test lint serve

install:
	pip install -r requirements.txt

test:
	pytest -q

lint:
	ruff check .

serve:
	python -m app --reload

That is the whole trick. The commands were always there, scattered across a README that drifted out of date, a half-remembered shell history, and one person's head. The Makefile just gathers them in the obvious place and gives them short names. make test, make serve, done. Nobody has to know the exact pytest incantation, because the incantation lives in the one file you check first.

I have watched people reach for fancier task runners, and some are genuinely nicer. But make is already on the machine, everybody half-knows it, and a target is just a name with some shell underneath. For a project that builds nothing, that is exactly enough. The point was never compilation. The point is having one front door.