2 min read | by Jordi Prats
When we create Makefile targets, we are actually defining "file targets": Make will try to create these files running the commands we are defining:
target: command
But sometimes we want to create some targets that do not represent physical files in the file system. A good example of that are the "clean" targets (as in make clean)
When we create these targets we want to run these commands regardless of the presence of any file. Turns out, if there's a file named exactly as the target it won't run it:
$ make echo cleaning cleaning $ touch clean $ make make: `clean' is up to date.
In order to not associate it with files we'll need to mark it using .PHONY:
.PHONY: clean clean: echo cleaning
If we now repeat the experiment, we'll see how it will run even with the presence of the clean file:
$ touch clean $ make clean echo cleaning cleaning
Posted on 15/02/2023