The Unix operating system has long had to deal with automating large
or repetitive compilations. The most enduring tool for this purpose
is make, invented by Stu Feldman at Bell
Laboratories in the mid-1970s and still widely used. There have been
literally dozens of make -like programs over the
years. The
X Window System has
imake, which is really a front-end to
make. Linux and GNU enthusiasts have
gmake, and BSD systems feature BSD
make; one or another will be installed under the
name make. The cygwin32 project features its own
make, a version of gmake.
make consults a file called
Makefile
(or
makefile
) in the current directory to figure out
what you want done and how to do it. A makefile to build one Java
program could be as simple as this:
all: javac HelloWorld.java
Makefiles can be much more involved. One common feature is to
parameterize a makefile so that if you need to port the code to a new
platform or you distribute your source code to others to port, all
the necessary makefile changes are in one place. For example, to use
make variables to let the user compile with
either javac or Jikes, and to add a rule to
remove the *.class
files after a round of
debugging, the makefile might grow somewhat, as shown here. Note that
lines beginning with the pound sign (#
) are
comments for the reader and are
ignored by make :
# Makefile for Acme FlutterBox program. # Uncomment one of these compiler definitions: #JAVAC= javac JAVAC= jikes +E compile: $(JAVAC) *.java clean: @rm -f *.class
All modern
Unix systems and most MS-Windows IDEs
ship with some version of make. Java became
popular after the current fragmentation of Unix into multiple systems
maintained by different groups, so many current
make programs do not come preconfigured with
“convenience” rules for Java; they all come with rules
for C and other older languages. Thus you may want to provide a
“default” rule for compiling from
FILE.java
into FILE.class
.
The way you do this will vary from one version of
make to another, so please see your
system’s documentation. For one such rule, see the file
jmake.rules
in the source distribution. For some
slightly more involved, but still relatively simple, examples of
using make, consult the files named
Makefile
in the source distribution.[7]
The sidebar Make Versus Ant.
Also, you may want to refer to the book Using Make and Imake (O’Reilly).
[7] The one bit of make syntax that isn’t explained is VARIABLE?=VALUE, which sets VARIABLE to VALUE only if it is not set. This is often used in make to pass a variable down and allow it to have a default value in the sub-makefile, but be overridden from the “main” makefile.
18.223.171.51