I've been using and writing Makefiles for over a decade and, ironically, my least favorite experiences with it are in the ecosystems (C and C++) it's ostensibly intended for.
When using it for Python or multi-language projects (especially ones with lots of code generation or intermediate outputs), it's a joy: it's very satisfying to be able to write dependency patterns and relations and have the machine satisfy and parallelize them.
When using it for Python or multi-language projects (especially ones with lots of code generation or intermediate outputs), it's a joy: it's very satisfying to be able to write dependency patterns and relations and have the machine satisfy and parallelize them.