What does .PHONY actually do? .PHONY is used to mark a target as phony. That means a target that doesn't take into consideration for execution any file that matches its name. Let's say we have a target called , which removes the cache of an application clear-cache clear-cache: rm -rf cache/* Which results in the following command: The cache removal cli command will run fine most of the time, but let's check what happens if we at the same level as the Makefile add a file with the same name as the target Now when running make clear-cache again we get: The Makefile says basically that it has the target file already and doesn't need to execute. This default behavior is not what we expect in this case and we want to override it. This is when the directive comes to the rescue. .PHONY Let's update our example to use it: .PHONY: clear-cache clear-cache: rm -rf cache/* After marking the target as phony, the command behaves as expected Pro tip: Another way to mark the targets as phony is to have them all in a list rather than above each of them like: clear-cache: rm -rf cache/* clear-build: rm -rf build/* .PHONY: clear-cache clear-build Conclusion In order to override the default behavior in Makefile and use some targets like command runners you can use .PHONY. References: GNU Make Manual Also published here.