VMake introduces the concept of project and sub-projects to handle large scale software systems. A project is a piece of software which constitutes a meaningful sub-system. This ``divide and conquer'' approach on large software system cuts down the average size of each project. Dividing large scale software projects into smaller sub-projects has been now used for quite a while in software development[Sha89, Sha95], but was not extended to the build process for CASE tools. VMake stores dependences between projects in an acyclic graph, that means no dependence loops are allowed between projects. VMake itself is a project of its own. The project definition file for it is shown in Figure 3.1.
Abbildung 3.1: Project definition of VMake
With the Project-Definition the symbolicName VMake is defined for the project. In addition the project depends on two sub-projects which are referenced by the symbolicNames ViennaLispInterpreter and ViennaBaseSystem. The project information of these sub-projects is automatically loaded so that all dependence information to built the main project is available.