News
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 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:
- Indentation is significant, but tabs are not required.
- The OMake language is functional: functions are first-class and there are no
side-effects apart from I/O.
- 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.