XMake version: 0.93a
Release Date: 08/17/05
Copyright (c) 2003 Gregory Keranen. All rights reserved.
The 'Make' utility is a very powerful software development tool which has
been in general use for over 20 years now, mostly in the context of
compiled applications (C, C++, Pascal, etc.).
Gnu Make has the advantages of being: free (Gnu Public License), mature,
fast, widely ported (*nix, Windows) and includes many handy and
performance-enhancing functions. Of particular importance to XMake is the
'eval()' function, added in version 3.80, which enables the dynamic
creation of makefile rules.
Unfortunately, power comes with a price: i.e., the MAKEFILES, which you
must write - with great care - and MAINTAIN, as projects evolve. Aside
from some built-in rules which are best disabled (-r option), Gnu Make
does not include any predefined makefiles or templates for makefile
generation. Gnu Make will not automatically detect source files,
dependencies or create rules unless you write the makefiles to do these
Enter, XMake: eXtendable Make Environment!
XMake is designed to:
+ Simplify and enhance the use of Gnu Make by providing a generic,
automated and re-usable makefile environment
+ Enable the use of Make as a 'black box'. No need to edit makefiles
for basic functionality: simply edit a line or two in a single config file
and off you go!
+ Improve reliability and extensibility for advanced users with a set
of pre-defined macros and well-defined component makefiles.
+ Provide a standard way to extend XMake's features to arbitrary
[source file] -> [output file] suffix mappings
+ Isolate the XMake build environment from the user's shell environment
with the use of project-level configuration files: XMake projects are
self-contained and should always produce the same results, regardless of
an individual's shell environment.
+ Avoid the dangers of recursive make by adhering to a project-oriented
SINGLE makefile design
+ Support shared targets between XMake projects, detecting circular
dependencies and building targets reliably when dependencies between
projects are unknown.
+ Peacefully coexist with Gnu Make, avoiding name collisions with
makefiles, command line options and environmental variables. XMake can be
used alone or in combination with an existing Gnu Make environment and has
access to all of Gnu Make's command-line options, environmental and
+ Establish variable naming conventions to allow use of core XMake
makefiles together with custom makefiles without risk of side-effects when
many makefiles are included in the same namespace.
+ Establish a naming convention for makefiles to distinguish various
types: with or without rules; manually or auto-generated.
+ Encourage the use of Gnu Make in contexts such as scripted web
application development, where it is currently under-utilized
+ Offer a framework for contributed makefiles from the Gnu Make
community so that we can learn from each other rather than independently
re-inventing the wheel on every project!