OMake: Designing a Scalable Build Process

  • Jason Hickey
  • Aleksey Nogin
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3922)


Modern software codebases are frequently large, heterogeneous, and constantly evolving. The languages and tools for software construction, including code builds and configuration management, have not been well-studied. Developers are often faced with using 1) older tools (like make) that do not scale well, 2) custom build scripts that tend to be fragile, or 3) proprietary tools that are not portable.

In this paper, we study the build issue as a domain-specific programming problem. There are a number of challenges that are unique to the domain of build systems. We argue that a central goal is compositionality—that is, it should be possible to specify a software component in isolation and add it to a project with an assurance that the global specification will not be compromised. The next important goal is to cover the full range of complexity—from allowing very concise specifications for the most common cases to providing the flexibility to encompass projects with unusual needs. Dependency analysis, which is a prerequisite for incremental builds, must be automated in order to achieve compositionality an reliability; it also spans the full range of complexity.

We develop a language for describing software builds and configuration. We also develop an implementation (called OMake), that addresses all the above challenges efficiently and portably. It also provides a number of features that help streamline the edit/compile development cycle.

OMake is freely available under the GNU General Public License, and is actively being used in several large projects.


  1. 1.
    Clemm, G.M.: The Odin System, Morristown, New Jersey (1994)Google Scholar
  2. 2.
    Dubois, P.: Software Portability with Imake, 2nd edn. O’Reilly, Sebastopol (1996)Google Scholar
  3. 3.
    Feldman, S.I.: Make-a program for maintaining computer programs. Software - Practice and Experience 9(4), 255–265 (1979)CrossRefzbMATHGoogle Scholar
  4. 4.
    Holzner, S.: Ant: The Definitive Guide, 2nd edn. O’Reilly, Sebastopol (2005)Google Scholar
  5. 5.
    Leroy, X.: The Objective Caml system release 1.07. INRIA, France (May 1997)Google Scholar
  6. 6.
    MacKenzie, D., Elliston, B., Demaille, A.: Autoconf: Creating Automatic Configuration Scripts. Free Software Foundation (November 2003),
  7. 7.
    MacKenzie, D., Tromey, T.: GNU Automake. Free Software Foundation (September 2003),
  8. 8.
    Scons, A.: software construction tool. Home page,
  9. 9.
    Stallman, R.M., McGrath, R., Smith, P.: GNU Make: A Program for Directing Recompilation. Free Software Foundation (July 2002),
  10. 10.
    Vaidheeswarran, R.: Cons: A Make replacement. Home page,
  11. 11.
    Wingerd, L., Seiwald, C.: Constructing a large product with Jam. In: ICSE 1997: Proceedings of the SCM-7 Workshop on System Configuration Management, London, UK, pp. 36–48. Springer, Heidelberg (1997)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Jason Hickey
    • 1
  • Aleksey Nogin
    • 1
  1. 1.Computer Science DepartmentCalifornia Institute of TechnologyUSA

Personalised recommendations