Commit | Line | Data |
---|---|---|
b2186d16 JB |
1 | # define compiler and compiler flag variables |
2 | # define a variable for compiler flags (JFLAGS) | |
3 | # define a variable for the compiler (JC) | |
4 | # define a variable for the Java Virtual Machine (JVM) | |
5 | ||
6 | JFLAGS = -g | |
7 | JC = javac | |
8 | JVM = java | |
9 | ||
10 | # | |
11 | # Clear any default targets for building .class files from .java files; we | |
12 | # will provide our own target entry to do this in this makefile. | |
13 | # make has a set of default targets for different suffixes (like .c.o) | |
14 | # Currently, clearing the default for .java.class is not necessary since | |
15 | # make does not have a definition for this target, but later versions of | |
16 | # make may, so it doesn't hurt to make sure that we clear any default | |
17 | # definitions for these | |
18 | # | |
19 | ||
20 | .SUFFIXES: .java .class | |
21 | ||
22 | ||
23 | # | |
24 | # Here is our target entry for creating .class files from .java files | |
25 | # This is a target entry that uses the suffix rule syntax: | |
26 | # DSTS: | |
27 | # rule | |
28 | # DSTS (Dependency Suffix Target Suffix) | |
29 | # 'TS' is the suffix of the target file, 'DS' is the suffix of the dependency | |
30 | # file, and 'rule' is the rule for building a target | |
31 | # '$*' is a built-in macro that gets the basename of the current target | |
32 | # Remember that there must be a < tab > before the command line ('rule') | |
33 | # | |
34 | ||
35 | .java.class: | |
36 | $(JC) $(JFLAGS) $*.java | |
37 | ||
38 | ||
39 | # | |
40 | # CLASSES is a macro consisting of N words (one for each java source file) | |
41 | # When a single line is too long, use \<return> to split lines that then will be | |
42 | # considered as a single line. For example: | |
43 | # NAME = Camilo \ | |
44 | Juan | |
45 | # is understood as | |
46 | # NAME = Camilo Juan | |
47 | ||
48 | CLASSES = \ | |
6e9d7383 | 49 | ClassPreamble.java \ |
b2186d16 JB |
50 | Main.java |
51 | ||
52 | # | |
53 | # MAIN is a variable with the name of the file containing the main method | |
54 | # | |
55 | ||
56 | MAIN = Main | |
57 | ||
58 | # | |
59 | # the default make target entry | |
60 | # for this example it is the target classes | |
61 | ||
62 | default: classes | |
63 | ||
64 | ||
65 | # Next line is a target dependency line | |
66 | # This target entry uses Suffix Replacement within a macro: | |
67 | # $(macroname:string1=string2) | |
68 | # In the words in the macro named 'macroname' replace 'string1' with 'string2' | |
69 | # Below we are replacing the suffix .java of all words in the macro CLASSES | |
70 | # with the .class suffix | |
71 | # | |
72 | ||
73 | classes: $(CLASSES:.java=.class) | |
74 | ||
75 | ||
76 | # Next two lines contain a target for running the program | |
77 | # Remember the tab in the second line. | |
78 | # $(JMV) y $(MAIN) are replaced by their values | |
79 | ||
80 | run: $(MAIN).class | |
81 | $(JVM) $(MAIN) | |
82 | ||
83 | # this line is to remove all unneeded files from | |
84 | # the directory when we are finished executing(saves space) | |
85 | # and "cleans up" the directory of unneeded .class files | |
86 | # RM is a predefined macro in make (RM = rm -f) | |
87 | # | |
88 | ||
89 | clean: | |
90 | $(RM) *.class |