Notes on using `make`

GNU Make manual
predefined variables:
	$@	full name of current target
	$?	list of files for current dependency which are out-of-date
	$<	first prerequisite
	$^	all dependencies
	$+	all dependencies, with repetitions!

pattern substitution:
	OBJS = data.o io.o main.o
	$(OBJS:.o=.c) ==> data.c io.c main.c

.PHONY --- tells make which targets are *not* files