Afraid of Makefiles? Don't be
Make's underlying design is great (it builds a DAG of dependencies, which allows for parallel walking of the graph), but there's a number of practical problems that make it a royal pain to use as a generic build system:<p>1. Using make in a CI system doesn't really work, because of the way it handles conditional building based on mtime. Sometimes you just don't want the condition to be based on mtime, but rather a deterministic hash, or something else entirely.<p>2. Make is _really_ hard to use to try to compose a large build system from small re-usable steps. If you try to break it up into multiple Makefiles, you lose all of the benefits of a single connected graph. Read the article about why recursive make is harmful: <a href="http://aegis.sourceforge.net/auug97.pdf" rel="nofollow">http://aegis.sourceforge.net/auug97.pdf</a><p>3. Let's be honest, nobody really wants to learn Makefile syntax.<p>As a shameless plug, I built a tool similar to Make and redo, but just allows you to describe everything as a set of executables. It still builds a DAG of the dependencies, and allows you to compose massive build systems from smaller components: <a href="https://github.com/ejholmes/walk" rel="nofollow">https://github.com/ejholmes/walk</a>. You can use this to build anything your heart desires, as long as you can describe it as a graph of dependencies.