| 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 = \ |
| 49 | ListExtension.java \ |
| 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 |