Build system (source code)

= Build system

A <build system> executes declared transformations from source <files> and other <inputs> to build <outputs>, respecting their <dependency graph>. Common steps include code generation, <compilation>, <linking (computing)> and packaging. CMake describes builds through targets such as executables and <software libraries>, with dependencies between them.<cmake-buildsystem in the CMake documentation>[Introduction and Binary Targets]{ref}

For example, `main.o` and `math.o` must exist before they can be linked into an executable. If only the source for `math.o` changes, an incremental build can reuse `main.o`, rebuild `math.o` and relink. Reuse is valid only when every relevant requirement has been tracked: a changed header, tool option or generated <input> can invalidate an apparently unchanged <output>. Correct dependency declarations are part of build correctness.