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.