Plasma GitLab Archive
Projects Blog Knowledge

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



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 Makefiles, 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.

This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml