# argumentos (e opções) para o programa ARGS = # linguagem definida/processada LINGUAGEM = expressoes # classes do programa CLASSES = Main Expressao # ... JAVA = java JAVAFLAGS = JAVAC = javac JAVACFLAGS = JCLASSPATH = .:/usr/share/java/cup.jar CUP = cup CUPFLAGS = -nosummary JLEX = jlex JLEXFLAGS = MAIN_CLASSES = parser.class Yylex.class \ $(patsubst %, %.class, $(CLASSES)) INTERMEDIATE_FILES = $(LINGUAGEM).lex.java sym.java parser.java Yylex.java .PHONY: all clean run Makefile %.class: %.java CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< all: $(MAIN_CLASSES) parser.java sym.java: $(LINGUAGEM).cup $(CUP) $(CUPFLAGS) $< @[ -s $@ ] || { rm -f $@; exit 1; } parser.class: parser.java Yylex.class CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< $(LINGUAGEM).lex.java: $(LINGUAGEM).lex $(JLEX) $(JLEXFLAGS) $< Yylex.java: ln -sf $(LINGUAGEM).lex.java $@ Yylex.class: Yylex.java $(LINGUAGEM).lex.java sym.class CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< clean: $(RM) $(INTERMEDIATE_FILES) $(RM) *.class run: CLASSPATH=$(JCLASSPATH) $(JAVA) $(JAVAFLAGS) Main $(ARGS)