Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I've been thinking a lot about build systems lately. I enjoy the discussion that this post has provoked. The post itself is weaker than it could have been, in that it does not stick to a single example when comparing build tools, and does not pin down any criteria for distinguishing between build tools.

If you are interested in a comparison of a few interesting build tools, please check out Neil Mitchell's "build system shootout" : https://github.com/ndmitchell/build-shootout . Neil is the author of the `Shake` build system. The shootout compares `Make`, `Ninja`, `Shake`, `tup` and `fabricate`.

Another possibly interesting build tool is `buck`, although it is primarily aimed at java / android development. See http://facebook.github.io/buck/ . There's a little discussion about `gerrit`'s move to `buck` here: http://www.infoq.com/news/2013/10/gerrit-buck .

Here's some questions I'd ask of a build system:

- is it mature?

- which platforms does it support?

- which language ecosystems does it support? (language-agnostic? C/C++? ruby? python? java?)

- does it support parallel builds?

- does it support incremental builds?

- are incremental builds accurate?

- is it primarily file-based?

- how does it decide when build targets are up-to-date, if at all? (e.g. timestamps, md5 hash of content, notification from the operating system)

- does it allow build scripts for different components to be defined across multiple files and handled during the same build?

- does it enforce a particular structure upon your build scripts that makes them more maintainable?

- how does it automatically discover dependencies, if at all? (e.g. parsing source files, asking the compiler, builds instrumented via FUSE/strace)

- how easy is it to debug?

- is it possible to extend in a full-featured programming language?

- does it let you augment the build dependency graph mid-way through execution of a build?

- how simply can it be used with other tools such as your chosen continuous integration server, test framework(s), build artifact caches, etc?

Many of these criteria are completely overkill for trivial build tasks, where you don't really need anything fancy.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: