It's interesting, but I can't help but think that by the time you're adding `.PHONY` after most rules, you're not using the right tool for the job.

(I generally find a small set of shell scripts work, or just three or four rules in the package.json file I can access with `npm run`).

The [Just] task runner can be what you want: it's simpler than Make, with less magic, but it allows to declare task dependencies.

[Just]: https://github.com/casey/just