The OMake build system

Jason Hickey et. al.

April 11, 2006

Version 0.9.6.9

omake is a build system designed to scale from small projects to very large projects spanning many directories. omake uses a syntax similar to make(1), with many additional features, including accurate automated dependency analysis based on MD5 digests.

Table of Contents

Description

omake is designed for building projects that might have source files in several directories. Projects are normally specified using an OMakefile in each of the project directories, and an OMakeroot file in the root directory of the project. The OMakeroot file specifies general build rules, and the OMakefiles specify the build parameters specific to each of the subdirectories. When omake runs, it walks the configuration tree, evaluating rules from all of the OMakefiles. The project is then built from the entire collection of build rules.

Automatic dependency analysis

Dependency analysis has always been problematic with the make(1) program. omake addresses this by adding the .SCANNER target, which specifies a command to produce dependencies. For example, the following rule

    .SCANNER: %.o: %.c
        $(CC) $(INCLUDE) -MM $<

is the standard way to generate dependencies for .c files. omake will automatically run the scanner when it needs to determine dependencies for a file.

Content-based dependency analysis

Dependency analysis in omake uses MD5 digests to determine whether files have changed. After each run, omake stores the dependency information in a file called .omakedb in the project root directory. When a rule is considered for execution, the command is not executed if the target, dependencies, and command sequence are unchanged since the last run of omake. As an optimization, omake does not recompute the digest for a file that has an unchanged modification time, size, and inode number.

See the following manual pages for more information.

omake-quickstart
A quickstart guide to using omake.
omake-options
Command-line options for omake.
omake-root
The system OMakeroot contains the default specification of how to build C, OCaml, and LaTeXprograms.
omake-language
The omake language, including a description of objects, expressions, and values.
omake-shell
Using the omake shell for command-line interpretation.
omake-rules
Using omake rules to build program.
omake-base
Functions and variables in the core standard library.
omake-system
Functions on files, input/output, and system commands.
omake-pervasives
Pervasives defines the built-in objects.
osh
The osh command-line interpreter.
omake-doc
All the OMake documentation in a single page.

References

See Also

omake(1), omake-quickstart(1), omake-options(1), omake-root(1), omake-language(1), omake-shell(1), omake-rules(1), omake-base(1), omake-system(1), omake-pervasives(1), osh(1), make(1)

Version

Version: 0.9.6.9 of April 11, 2006.

License and Copyright

©2003-2006, Mojave Group, Caltech

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Author

Jason Hickey et. al.
Caltech 256-80
Pasadena, CA 91125, USA
Email: omake-devel@metaprl.org
WWW: http://www.cs.caltech.edu/~jyh