SRCS=$(wildcard *.cc)
DEPS=$(patsubst %.cc,build/%.d,$(SRCS))
EXES=both_manual both_proxy grads test undergrads
CXX=clang++
CXXFLAGS=-std=c++14 -O3 -Wall -Wextra

all:	$(EXES)

clean:
	rm -rf build

distclean:	clean
	rm -f $(EXES)

both_manual:	build/both_manual.o build/grad.o build/core.o build/grade.o \
                build/median.o
	$(CXX) $(CXXFLAGS) -o $@ $^

both_proxy:	build/both_proxy.o build/grad.o build/core.o build/grade.o \
                build/median.o build/student_info.o
	$(CXX) $(CXXFLAGS) -o $@ $^

grads:	build/grads.o build/grad.o build/core.o build/grade.o build/median.o
	$(CXX) $(CXXFLAGS) -o $@ $^

test:	build/test.o build/grad.o build/core.o build/grade.o build/median.o
	$(CXX) $(CXXFLAGS) -o $@ $^

undergrads:	build/undergrads.o build/grad.o build/core.o build/grade.o \
                build/median.o
	$(CXX) $(CXXFLAGS) -o $@ $^


-include $(DEPS)

build/%.d:	%.cc
	mkdir -p build
	$(CXX) $(CXXFLAGS) $< -MM -MT $(patsubst %.cc,build/%.o,$<) -MF $@

build/%.o:	%.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

.PHONY: all clean distclean
