Automated software build (source code)

= Automated software build

An <automated software build> turns declared <source code>[source inputs] and <software dependencies>[dependencies] into <outputs> through repeatable tool steps, such as code generation, <compilation>, <linking (computing)> and packaging. A build description defines those steps and their <software dependencies>[dependencies]; a <build system> decides their order and may reuse <outputs> whose relevant <inputs> have not changed.

For example, changing a header can require recompiling several <source code>[source files] before relinking a <computer program>. Omitting that dependency can produce a stale executable even when every individual <compiler> invocation succeeds. In <continuous integration>, the automated build provides a repeatable check of the integrated revision, often combined with tests.<Continuous Integration by Martin Fowler>[Automate the Build and Make the Build Self-Testing]{ref} Repeatability requires identifying tool versions, generated <inputs> and configuration as well as the main <source code>[source files].