XMake PURPOSE

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
things.

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
    makefile variables.

    + 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!