If you don't mind running make clean when you switch between debug and normal builds the following should suffice. The main trick is
Target Specific Variables.
Code:
CXX=g++
CC=g++ # CC is used for linking
CXXFLAGS=-ansi -std=c++98 -Wall -W
DEBUG=-g -D DEBUG
OBJS=main.o NgramCreator.o
main: $(OBJS)
debug: CXXFLAGS += $(DEBUG)
debug: main
$(OBJS): NgramCreator.h
clean:
rm -f *~ *.o main *.gch
If you are going to be switching back and forth a lot, I would recommend keeping things in separate directories, like this:
Code:
CXX=g++
CC=g++
CXXFLAGS=-ansi -std=c++98 -Wall -W
DEBUG=-g -D DEBUG
OBJS=main.o NgramCreator.o
SRC=$(OBJS:.o=.cpp)
DEBUG_OBJS = $(addprefix debug/, $(OBJS))
main: $(OBJS)
debug: CXXFLAGS += $(DEBUG)
debug: main
$(OBJS): NgramCreator.h
clean:
rm -f *~ *.o main *.gch debug/*.o debug/main
$(DEBUG_OBJS) : $(SRC) NgramCreator.h
debug : debug/main
debug/main : $(DEBUG_OBJS)
$(CXX) $(DEBUG_OBJS) -o debug/main
debug/%.o : %.cpp
$(CXX) $(CXXFLAGS) $(DEBUG) -c $< -o $@