That said, it is *useful* which is why it survives. A working makefile will generally build your product from scratch efficiently, and rebuilt it as well if you're developing.
But the shame is, all the effort I've put into writing makefiles over the years is tremendous. Spread among all software writers, excessive.
I think if effort had been put into evolving make (instead of writing makefiles), it would have been the tide to raise all the boats.
some simple examples
- add a "expect makefile version > n.nn" statement
- fix tab vs spaces
- better conditional stuff (think if/then/else, etc), maybe just logic in general
- allow snippets of other languages (shell or python) without embedding everything into makefile syntax
- more conscious handling of real targets (files) vs directories vs fake targets (like "clean" in make clean)
- easier (for users) handling of paths/directories/files
- maybe well-defined plugins, say a cross-compile-for-arm toolchain or similar
- lots more I can't recall.
I think cmake is kind of nice in a lot of respect (although it has its own issues as you get further along solving cross-platform build problems)