Here is a reduced version of my Makefile:
.PHONY: all
all: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
According to the Make documentation:
The prerequisites of the special target .PHONY are considered
to be phony targets. When it is time to consider such a target,
make will run its recipe unconditionally, regardless of whether
a file with that name exists or what its last-modification time is.
http://www.gnu.org/software/make/manual/html_node/Special-Targets.html
Make runs the recipe of PHONY targets unconditionally - prerequisites don't matter.