The build process forms only part of the overall software development process. Nevertheless, the frequency with which the process is invoked is such that small inefficiencies result in substantial time penalties.
Designing a generic build process that is usable by all project teams is an important building block in the creation of an adaptive foundation for rapid development. Having an optimal and accurate build process in place at the start of the project provides a significant time saving.
The effort spent on defining a common build process is a good investment for the long-term success of all projects, so don't skip this vital development task. Remember to treat the build process as a time-and-motion study and remove any unnecessary steps.
With the build process covered, the next chapter looks at the development tools that should be a part of any software engineer's toolbox.
Ant is a tool for building software. The folks at Apache chose Ant as the basis for Maven, a tool for performing project management, build, and deployment tasks. Maven provides a formal framework for developing software artifacts and strictly enforces dependencies between build targets.
For more information on Maven, and to download the latest version of the software, see http://maven.apache.org.
An important part of the software development environment not covered in this chapter is the mechanism for the integration of software produced by team members. Bringing together newly developed pieces of functionality can often result in a broken build process, a major source of wasted time on any project.
A solution to the software integration problem is to adopt a policy of continuous integration. This idea involves integrating software changes frequently, possibly several times a day, and is the brainchild of Martin Fowler and Matthew Foemmel. The pair wrote their ideas up in a paper that can be viewed at http://www.martinfowler.com/articles/continuousIntegration.html.
The concept of continuous integration is backed by the open source product CruiseControl, a framework that integrates with your build system to perform regular builds and reports on build status. The CruiseControl software is obtainable from http://cruisecontrol.sourceforge.net.
Finally, for anyone who wishes to experiment with make files, a copy of GNU Make is available from http://www.gnu.org/software/make.