I rather enjoy programming on interesting projects, but I loathe Makefiles. Because of Makefiles, I hate developing on any Linux variant. It's utterly painful.
Why do I hate Makefiles?
- Arbitrary organizational structures, or none at all! Every developer has their own Makefile style that's completely individual and probably not even self-consistent.
- Obfuscated behavior. One Makefile isn't sufficient to build anything substantial, so a single project is likely to have dozens of Makefiles in as many directories, all including each other and depending on globals and environment variables that are tedious to track down. It's every bad programming practice rolled together!
- Arcane syntax. What? You expected spaces and tabs to be interchangeable? Fool! And if you put the wrong number of whichever whitespace is expected you'll get an error, right? Nope, your command will just be silently ignored and you'll get some random fault in an entirely different area when something that depends on the ignored command fails. Furthermore, symbols and keywords have none of their traditional programming meanings, and procedural blocks are jumbled together with rules.
- Invisible influences. Directory paths are relative to who-knows-where. Most rules in a typical Makefile are implied rather than explicit. Most commands have unintuitive side-effects. Half the game is trying to prevent things you don't want from happening.
Don't get me started on autoconfig.