I created makeme for the kissme Java Virtual Machine.
I needed a make tool that would easily accomodate a project with many subdirectories. Make does not do this. Instead makeme requires a much simpler makefile, called .makeme . Here is an example of the rule used to build makeme itself:
BuildRule b1 = "jikes -classpath /home/jewel/kissme_classpath/:/home/jewel/java:/home/jewel/java/kopi/temp @full_path_source@" ;
You can see we have a defined a buildrule, this tells make to use the buildrule whenever it encounters a source file (either a .java or .c file) that needs to be built.
We have used a variable: @full_path_source@ which is simply the full path to the source file being built.
Subdir sident1 = "java.lang" Subdir sident2 = "java.lang.reflect" Subdir sident3 = "java.util" Subdir sident4 = "jos.system" Subdir sident5 = "plava" Subdir sident6 = "gnu.vm.stack.kludge" Subdir sident7 = "java.io" ;
Now in the java.lang dir we have a whole lot of .c files to be built. But there is no makefile for this directory, instead it inherits a buildrule from the .makeme files found higher up the tree. In this case the build rule was declared at the toplevel:
BuildRule b1 = "gcc -Wall -c -g -O0 -I. -Ivm -I@curdir@ @full_path_source@ -o @full_path_target@ "
Here we can see the directives -I. and -Ivm . These imply that the compiler is always run at the level of the top-level directory and everything is relative to that directory. @curdir@ gives us the current subdirectory. @full_path_target@ is necessary because we are compiling from the top-level directory.
I used a hacked version of antlr to build and use makeme. You'll have to install it and see if it works for you.
Until there is a suitable replacement I will continue developing makeme for the purposes of building kissme.
John Leuner - jewel.removeforspam@pixie.co.za
26 July 2000