SRCDIR=src HEADDIR=include BUILDDIR=build DEBUGDIR=$(BUILDDIR)/debug TEXTUREDIR=textures OBJFILEDIR=obj BACKUPDIR=backup TESTDIR=unittest TESTFLAGS= $(FLAGS) -lboost_unit_test_framework CC=g++ FLAGS=-Wall -g -DDEBUG -Wno-write-strings FLAGS-FINAL=$(FLAGS) CFLAGS = -L/usr/X11R6/lib -L/usr/local/lib -lm -lrt -lpthread -I$(HEADDIR) LDFLAGS = $(CFLAGS) SRC= $(shell find $(SRCDIR) -name "*.cpp") OBJ= $(SRC:$(SRCDIR)/%.cpp=$(BUILDDIR)/%.o) EXEC=main .PHONY: all all: build #link all .o to an executable file in debug dir $(EXEC): $(OBJ) @if test ! -d "$(DEBUGDIR)"; then mkdir $(DEBUGDIR); fi $(CC) -o $(DEBUGDIR)/$@ $^ $(LDFLAGS) @if test -d "$(OBJFILEDIR)"; then cp -Rf $(OBJFILEDIR) $(DEBUGDIR); fi @if test -d "$(TEXTUREDIR)"; then cp -Rf $(TEXTUREDIR) $(DEBUGDIR); fi #compile all .cpp and .hpp into .o in build dir $(BUILDDIR)/%.o: $(SRCDIR)/%.cpp $(HEADDIR)/%.hpp @if test ! -d "$(BUILDDIR)"; then mkdir $(BUILDDIR); fi $(CC) -o $@ -c $< $(FLAGS) $(CFLAGS) #clean the build .PHONY: clean clean: @rm -rf $(BUILDDIR) && echo "clean done..." .PHONY: backup backup: @if test ! -d $(BACKUPDIR); then mkdir $(BACKUPDIR); fi @export temp="$(BACKUPDIR)/$(SRCDIR)-`date`"; mkdir "$${temp}"; cp -R $(SRCDIR) "$${temp}"/$(SRCDIR); cp -R $(HEADDIR) "$${temp}"/$(HEADDIR) .PHONY: clean-backup clean-backup: @rm -rf $(BACKUPDIR) .PHONY: clean-build clean-build: clean build .PHONY: build build: makesubdir $(EXEC) makesubdir: @if test ! -d "$(BUILDDIR)"; then mkdir -p $(BUILDDIR); fi @if test ! -d "$(DEBUGDIR)"; then mkdir -p $(DEBUGDIR); fi @cd $(SRCDIR); find -maxdepth 1 -type d -not -wholename "./.*" -exec mkdir -p "../$(BUILDDIR)/{}" \; ; .PHONY: run run: build @cd $(DEBUGDIR); ./$(EXEC) debugrun: build @cd $(DEBUGDIR); gdb ./$(EXEC) test: $(CC) $(TESTFLAGS) $(TESTDIR)/tests.cpp $(SRCDIR)/charutils.cpp $(SRCDIR)/linkedlist.cpp $(SRCDIR)/linkedlistbi.cpp $(SRCDIR)/linkedhashtable.cpp $(SRCDIR)/hash.cpp -o $(TESTDIR)/main -I$(HEADDIR) @cd $(TESTDIR); ./main