Makefile requirements for .JAVAC
Makefile has some requirements when used with the
.JAVAC
special target.
The .JAVAC
special target must be used with no dependencies and no build
script:
.JAVAC:
clearmake issues a warning and ignores any dependencies or build script.
Other than that, makefiles must use implicit (suffix or pattern) rules. For example:
.SUFFIXES: .java .class
.java.class:
rm -f $@
$(JAVAC) $(JFLAGS) $<
Makefiles might also use pattern rules for compatibility modes that support them. For example:
%.class: %.java
rm -f $@
$(JAVAC) $(JFLAGS) ${@:.class=.java}
The makefiles must also use absolute paths for .class targets. For example:
all_classes
: \proj\src\pkg1\foo.class
clearmake contains a built-in macro function you can use to specify absolute paths more easily:
$(javaclasses)
For more information about the javaclasses macro, see Using the javaclasses built-in macro.
The first time clearmake builds with .JAVAC enabled, clearmake is not making use of any inferred knowledge before it builds the first .class target.
After the first build session completes, the .class dependencies are known. As a result, some targets might be rebuilt in the second build session in that view, because clearmake is now using the .class.dep files, which might declare .class dependencies that require a different build order. After the second build session completes, the .class DOs are reusable in that view.