Adding to this, from what I understand, ninja was designed to be generated by another more feature-full build tools. For example in chromium, its generated from gyp (generate your projects) files. The fact that its human readable is just a plus.
Makefiles I presume, will be hard to write by hand when:
1. Your project code base is large
2. It take large amount of time or very powerful machines to build sub-modules (V8 for e.g in chromium) so, you don't want to do it all the time
3. Conditional inclusion of sub-modules (for iOS vs Android if you have two separate set of files etc)
4. Sub-modules are pulled in from 3rd parties into your code base
Makefiles I presume, will be hard to write by hand when:
1. Your project code base is large 2. It take large amount of time or very powerful machines to build sub-modules (V8 for e.g in chromium) so, you don't want to do it all the time 3. Conditional inclusion of sub-modules (for iOS vs Android if you have two separate set of files etc) 4. Sub-modules are pulled in from 3rd parties into your code base