From Ever changing code

Makefile adventures

.PHONY target

By default, Makefile targets are "file targets" - they are used to build files from other files. Make assumes its target is a file. These special targets are called phony and you can explicitly tell Make they're not associated with files. We don't need to use .PHONY as long as you don't have a file with the same name as the task. The task will always be executed anyway, and the Makefile will be more readable.

echo "echo \"This is clean file\""         > clean
echo "echo \"This is clean_runfile file\"" > clean_runfile

cat > Makefile <<EOF
.PHONY: clean
	cat ./clean
	cat ./clean_runfile

Running the example:

make clean # executes the commands explicitly as it has .PHONY target
cat ./clean
echo "This is clean file"

make clean_runfile 
make: 'clean_runfile' is up to date.