CC=g++ ifeq "$(distrib)" "" distrib=debug endif ifeq "$(distrib)" "debug" CFLAGS=-Wall -DDEBUG -fmax-errors=2 -std=c++11 OFLAGS=-ggdb -fno-inline endif ifeq "$(distrib)" "release" CFLAGS=-Wall -std=c++11 OFLAGS=-O2 -msse4.2 -funroll-loops --param max-unroll-times=8 endif ifeq "$(distrib)" "profile" CFLAGS=-Wall OFLAGS=-pg -msse4.2 -funroll-loops --param max-unroll-times=8 endif SRCS=$(shell ls src/*.cpp) OBJS=$(subst .cpp,.o,$(subst src/,obj/,$(SRCS))) EXE=bin/main_$(distrib).exe all: $(EXE) $(EXE): $(OBJS) $(CC) -o $@ $(OBJS) $(OFLAGS) obj/%.o: src/%.cpp $(CC) -c -o $@ $< $(CFLAGS) $(OFLAGS) clean: rm obj/*.o bin/*.exe release: make --no-print-directory distrib=release profile: make --no-print-directory distrib=profile bin/main_profile.exe gprof bin/main_profile.exe >profile.txt