1 # Define compiler
  2 #CXX=g++
  3 
  4 # Define compiler flags (show all warnings)
  5 CXXFLAGS=-Wall
  6 #CXXFLAGS=-std=c++0x
  7 
  8 # Define linker flags
  9 #LDFLAGS=-fopenmp
 10 
 11 # Compile optimized code
 12 CXXFLAGS+=-O2
 13 
 14 # Compile debuggable code
 15 #CXXFLAGS+=-g
 16 
 17 # Compile profilable code
 18 #CXXFLAGS+=-pg
 19 #LDFLAGS+=-pg
 20 
 21 # Define linker
 22 LD=g++
 23 
 24 # All source code files
 25 SRC=$(shell ls *.cpp)
 26 
 27 
 28 # Filenames of source code
 29 SHARED_SRC=ode.cpp check.cpp
 30 SHARED_HEADERS=typedefs.h ode.h functions.h check.h
 31 SRC_A=mainA.cpp $(SHARED_SRC)
 32 HEAD_A=$(SHARED_HEADERS)
 33 SRC_B=mainB.cpp $(SHARED_SRC)
 34 HEAD_B=$(SHARED_HEADERS)
 35 SRC_C=mainC.cpp $(SHARED_SRC)
 36 HEAD_C=$(SHARED_HEADERS)
 37 SRC_D=mainD.cpp $(SHARED_SRC)
 38 HEAD_D=$(SHARED_HEADERS)
 39 
 40 # Filenames of object files
 41 OBJ_A=$(SRC_A:.cpp=.o)
 42 OBJ_B=$(SRC_B:.cpp=.o)
 43 OBJ_C=$(SRC_C:.cpp=.o)
 44 OBJ_D=$(SRC_D:.cpp=.o)
 45 
 46 # Remove file type extension for binary filename
 47 BIN_A=odeA
 48 BIN_B=odeB
 49 BIN_C=odeC
 50 BIN_D=odeD
 51 
 52 # Define editor and options for `make edit`
 53 EDITOR=vim -p
 54 
 55 
 56 # The default "all" depends on A and B
 57 all: A B C D
 58 
 59 A:      plotA.png
 60 
 61 B:      plotB.png
 62 
 63 C:      plotC.png
 64 
 65 D:      plotD.png
 66 
 67 plotA.png: funcA.dat plotA.gp
 68         # Gnuplot: plotA.png
 69         @gnuplot plotA.gp
 70 
 71 plotB.png: funcB.dat plotB.gp
 72         # Gnuplot: plotB.png
 73         @gnuplot plotB.gp
 74 
 75 plotC.png: funcC.dat plotC.gp
 76         # Gnuplot: plotC.png
 77         @gnuplot plotC.gp
 78 
 79 plotD.png: funcD.dat plotD.gp
 80         # Gnuplot: plotD.png
 81         @gnuplot plotD.gp
 82 
 83 funcA.dat: $(BIN_A)
 84         @./$(BIN_A)
 85         
 86 funcB.dat: $(BIN_B)
 87         @./$(BIN_B)
 88 
 89 funcC.dat: $(BIN_C)
 90         @./$(BIN_C)
 91         
 92 funcD.dat: $(BIN_D)
 93         @./$(BIN_D)
 94         
 95 $(BIN_A): $(OBJ_A) $(HEAD_A)
 96         @# Link object files together
 97         $(LD) $(LDFLAGS) $(OBJ_A) -o $@ $(LDLIBS)
 98         
 99 $(BIN_B): $(OBJ_B) $(HEAD_B)
100         @# Link object files together
101         $(LD) $(LDFLAGS) $(OBJ_B) -o $@ $(LDLIBS)
102 
103 $(BIN_C): $(OBJ_C) $(HEAD_C)
104         @# Link object files together
105         $(LD) $(LDFLAGS) $(OBJ_C) -o $@ $(LDLIBS)
106 
107 $(BIN_D): $(OBJ_D) $(HEAD_D)
108         @# Link object files together
109         $(LD) $(LDFLAGS) $(OBJ_D) -o $@ $(LDLIBS)
110 
111 clean:  cleanA cleanB cleanC cleanD
112 
113 cleanA: 
114         @# Remove object files
115         rm -f $(OBJ_A) 
116         @# Remove binaries
117         rm -f $(BIN_A)
118         @# Remove datafiles and plot
119         rm -f funcA.dat plotA.png
120 
121 cleanB: 
122         @# Remove object files
123         rm -f $(OBJ_B) 
124         @# Remove binaries
125         rm -f $(BIN_B)
126         @# Remove datafiles and plot
127         rm -f funcB.dat plotB.png
128 
129 cleanC: 
130         @# Remove object files
131         rm -f $(OBJ_C) 
132         @# Remove binaries
133         rm -f $(BIN_C)
134         @# Remove datafiles and plot
135         rm -f funcC.dat plotC.png
136 
137 cleanD: 
138         @# Remove object files
139         rm -f $(OBJ_D) 
140         @# Remove binaries
141         rm -f $(BIN_D)
142         # Removing datafile and plot
143         @rm -f funcD.dat plotD.png
144 
145 htmlfiles: html/mainA.cpp.html html/mainB.cpp.html html/mainC.cpp.html html/mainD.cpp.html html/ode.cpp.html html/check.cpp.html html/check.h.html html/functions.h.html html/ode.h.html html/typedefs.h.html html/vector_arithmetic.h.html html/plotA.gp.html html/plotB.gp.html html/plotC.gp.html html/plotD.gp.html html/Makefile.html
146         # Generating HTML files
147         rst2html2 README.rst > html/README.html
148 
149 html/%.html: %
150         vim $< +TOhtml +"w $@" +"qall!"
151 
152 
153 edit:
154         @$(EDITOR) Makefile README.rst *.cpp *.h *.gp
155