While for simple programs the process consists of a single file being compiled, for complex software the source code may consist of many files and may be combined in different ways to produce many different versions.
The process of building a computer program is usually managed by a build tool, a program that coordinates and controls other programs. Examples of such a program are make, ant, maven and SCons. The build utility needs to compile and link the various files, in the correct order. If the source code in a particular file has not changed then it may not need to be recompiled (may not rather than need not because it may itself depend on other files that have changed). Sophisticated build utilities and linkers attempt to refrain from recompiling code that does not need it, to shorten the time required to complete the build. Modern build utilities may be partially integrated into revision control programs like Subversion. A more complex process may involve other programs producing code or data for the build process.