Blob Blame History Raw
The Makefiles in this package are rather advanced. They are partially based
on the article "Recursive Make considered Harmful", written by Peter Miller:
  http://miller.emu.id.au/pmiller/books/rmch/

There is one big Makefile in the root of this package. It includes many
other files; one for each directory in which source code is found. These
included files are called 'Module.mk'.

There are several interesting targets defined through this Makefile:
  * all
    Create everything in all directories.
  * install
    Install everything from all directories.
  * uninstall
    Uninstall everything.
  * clean
    Remove anything which can be regenerated from all directories. A call
    of 'make clean' (without any other targets) will ignore any .d files;
    this is useful when they are out of date (and prevent the calling of
    any other target).

The best way to understand the Module.mk subfiles is to examine one of them,
for example lib/Module.mk. They are not too difficult to understand.

There are several variables which can be set in the main Makefile. You can
also specify them on the command-line; this overrules any definitions
within the Makefile. For example: 'make all WARN=1' will enable all warnings.
Examine main Makefile to see which ones are available. The most important
ones for developers:
  * WARN
    Set to 1 to enable many compiler warnings.
  * DEBUG
    Set to 1 to enable any debugging code. Note that debugging code should
    only output more information, and never make the code mis-behave.

Several files are generated by Makefiles:
  * .rd
    Dependency files for executables. Automatically generated.
  * .ad
    Dependency files for static libraries. Automatically generated.
  * .ld
    Dependency files for shared libraries. Automatically generated.
  * .ro
    Object files for executables. They will be linked together to create
    the executable.
  * .ao
    Object files for static libraries
  * .lo
    Object files for shared libraries
The reason for using different extensions is to make the Makefile much
simpler.

There are lots of comments within the main Makefile. Please read them if
you want to know more.