The OMake build system

|  | OMake Home Documentation Download Publications Mailing lists User contributions Users and projects Bugzilla Browse sources Changelog summary, verbose

### News

- Version 0.9.8.6 Release Candidate 1 (October 26, 2010)
- Version 0.9.9 Prerelease (June 20, 2007)

### Overview

OMake is a build system designed for scalability and portability. It uses a syntax similar to `make` utilities you may have used, but it features many additional enhancements, including the following.

- Support for projects spanning several directories or directory hierarchies.
- Fast, reliable, automated, scriptable dependency analysis using MD5 digests, with full support for incremental builds.
- Dependency analysis takes the command lines into account — whenever the command line used to build a target changes, the target is considered out-of-date.
- Fully scriptable, includes a library that providing support for standard tasks in C, C++, OCaml, and LaTeX projects, or a mixture thereof.

  Often, a configuration file is as simple as a single line

      .DEFAULT: $(CProgram prog, foo bar baz)

  which states that the program "`prog`" is built from the files `foo.c`, `bar.c`, and `baz.c`. This one line will also invoke the default standard library scripts for discovering implicit dependencies in C files (such as dependencies on included header files).
- Full native support for rules that build several files at once.
- Portability: `omake` provides a uniform interface on Linux/Unix (including 64-bit architectures), Win32, Cygwin, Mac OS X, and other platforms that are supported by OCaml.
- Built-in functions that provide the most common features of programs like `grep`, `sed`, and `awk`. These are especially useful on Win32.
- Active filesystem monitoring, where the build automatically restarts whenever you modify a source file. This can be very useful during the edit/compile cycle.
- A built-in command-interpreter `osh` that can be used interactively.

OMake preserves the style of syntax and rule definitions used in `Makefile`s, making it easy to port your project to OMake. There is no need to code in Perl (cons), or Python (scons). However, there are a few things to keep in mind:

1. Indentation is significant, but tabs are not required.
2. The OMake language is functional: functions are first-class and there are no side-effects apart from I/O.
3. Scoping is dynamic.

OMake is licensed under a mixture of the GNU GPL license (OMake engine itself) and the MIT-like license (default configuration files).

OMake is part of the Mojave and MetaPRL projects.