This is a test/example for a nice Make based build system. The Config.mak should not be saved to the repositories usually, but in this case it is because part of this demonstration is to show how to customize the build system through Config.mak, and specially to show how a project can be "embedded" into another tweaking the Config.mak. lib1 is a standalone C library compiled into a shared object. lib2 is another shared library which uses lib1 and otherproj, which is a standalone project (living in the "subproj" subdirectory) "embedded" into this one. otherproj produces another standalone shared object. Finally, prog is a program which uses lib1 and lib2. Every project have it's copy of Lib.mak and it's own Toplevel.mak. Both files shouldn't be modified ever (unless you're hacking the build system). Then each directory containing some library or program to build (or directories to include) has a Build.mak, which has only the logic to build the programs/libraries. A well-known Makefile is added to each directory where you want to be able to do "make", just for convenience. This Makefile should be created once, with the default target to build and path to the top-level directory and never touched again. Build.mak should be changes only to add new programs or libraries to build.