namespace makefile {
/** @file README.dox

@cond usemainpage
	@mainpage
@endcond

@ifnot usemainpage
	@page makefilelib Makefilelib
@endif
 
@brief This library provides a C++ OO-framework for creating makefiles to use with GNU Make.

The following a well documented short example should illustrate the usage. For a more 
advanced example I recommend looking into the tester in test_makefilelib.cpp. 

@section usage Usage
@subsection mimf MakefileItem and Makefile
Each item that exists in the created makefile is encapsulated in an object of the abstract type 
MakefileItem. The class Makefile, currently a singleton, provides some general functionality. Most 
important it holds a vector of MakefileItems that are going to be output to the makefile. Therefore
any MakefileItem that should appear in the actual makefile has to be added to the output list by calling
MakefileItem::add. The MakefileItem then adds itself to the Makefile 's output list. The order of output is
the order of adding. So it is important to add a VariableDef before a VariableRef is used, so that GNU Make
will process the makefile correctly.

To write to the actual makefile Makefile::writeMakefile is called. All MakefileItem s that have been added 
are written to the ostream.

@note Makefile only holds pointers, so MakefileItem s can change after they have been added. Makefile does
not take ownership.

@attention All MakefileItem s added have to exist at the time Makefile::writeMakefile. So take care about
out-of-scope auto-variables or otherwise destroyed objects. They remove themselves on destruction.
And currently --as there was no need to implement a sophisticated remove method-- this resets the Makefile.
So if there are parts of your makefile missing, it's mostly because you forgot to add them, or they were
destroyed to early.

@subsection mgr Manager
To allow easy memory management the Manager was created to take over ownership of MakefileItem s. 
It just holds a vector of pointers of Manageable it owns and deletes them, when the Manager itself is destroyed.
Using the manager you don't have to worry about deleting all your MakefileItem s.
It can only delete heap-allocated objects of course (new). See \ref example.cpp "example" 

@note It's important to call Manager::own or Manager::own_add explicitly. Nothing is registered automatically.

@section sa See also

@ref example.cpp "Example"

@subpage unicode


@author Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
*/
}