# Makefile for interpreter and compiler # # File: Makefile # Author: course # Version: 1 COMMON-HFILES = basic.h estream.h lexeme.h parser.h HFILES = $(COMMON-HFILES) iavalue.h cavalue.h COMMON-CFILES = basic.cc estream.cc error.cc lexeme.cc parser.cc \ interpreter.cc CFILES = $(COMMON-CFILES) iavalue.cc cavalue.cc COMMON-OFILES = basic.o estream.o error.o INTERPRETER-OFILES \ = $(COMMON-OFILES) iavalue.o \ ilexeme.o iparser.o interpreter.o COMPILER-OFILES = $(COMMON-OFILES) cavalue.o \ clexeme.o cparser.o compiler.o BINARIES = interpreter compiler TESTS = test.in INTERMEDIATES = avalue.h $(INTERPRETER-OFILES) $(COMPILER-OFILES) \ interpreter.ls OUTPUTS = itest.out ctest.out diff: $(OUTPUTS) diff itest.out itest.out.reference diff ctest.out ctest.out.reference basic.o: $(COMMON-HFILES) basic.cc g++ -c -g -o basic.o basic.cc estream.o: $(COMMON-HFILES) estream.cc g++ -c -g -o estream.o estream.cc error.o: $(COMMON-HFILES) error.cc g++ -c -g -o error.o error.cc iavalue.o: $(COMMON-HFILES) iavalue.h iavalue.cc rm -f avalue.h cp -p iavalue.h avalue.h g++ -c -g -o iavalue.o iavalue.cc ilexeme.o: $(COMMON-HFILES) iavalue.h lexeme.cc rm -f avalue.h cp -p iavalue.h avalue.h g++ -c -g -o ilexeme.o lexeme.cc iparser.o: $(COMMON-HFILES) iavalue.h parser.cc rm -f avalue.h cp -p iavalue.h avalue.h g++ -c -g -o iparser.o parser.cc interpreter.o: $(COMMON-HFILES) iavalue.h interpreter.cc rm -f avalue.h cp -p iavalue.h avalue.h g++ -c -g -o interpreter.o interpreter.cc interpreter: $(INTERPRETER-OFILES) g++ -o interpreter -g $(INTERPRETER-OFILES) itest.out: test.in interpreter ./interpreter itest.out chmod 444 itest.out cavalue.o: $(COMMON-HFILES) cavalue.h cavalue.cc rm -f avalue.h cp -p cavalue.h avalue.h g++ -c -g -o cavalue.o cavalue.cc clexeme.o: $(COMMON-HFILES) cavalue.h lexeme.cc rm -f avalue.h cp -p cavalue.h avalue.h g++ -c -g -o clexeme.o lexeme.cc cparser.o: $(COMMON-HFILES) cavalue.h parser.cc rm -f avalue.h cp -p cavalue.h avalue.h g++ -c -g -o cparser.o parser.cc compiler.o: $(COMMON-HFILES) cavalue.h interpreter.cc rm -f avalue.h cp -p cavalue.h avalue.h g++ -c -g -o compiler.o interpreter.cc compiler: $(COMPILER-OFILES) g++ -o compiler -g $(COMPILER-OFILES) ctest.out: test.in compiler ./compiler ctest.out chmod 444 ctest.out clean: rm -f $(BINARIES) $(INTERMEDIATES) $(OUTPUTS) print: interpreter.ls interpreter.ls: $(HFILES) $(CFILES) $(TESTS) $(OUTPUTS) ls -l >interpreter.ls Makefile ls -l >>interpreter.ls $(HFILES) ls -l >>interpreter.ls $(CFILES) ls -l >>interpreter.ls $(TESTS) ls -l >>interpreter.ls $(OUTPUTS) print2 interpreter.ls Makefile $(HFILES) $(CFILES) \ $(TESTS) $(OUTPUTS)