#.SUFFIXES:.c.o
#.SUFFIXES:.cpp.o
# The default suffix list is: .out, .a, .ln, .o, .c, .cc, .C, .cpp, .p, .f, .F, .m, .r, .y, .l, .ym, .lm, .s, .S, .mod, .sym, .def, .h, .info, .dvi, .tex, .texinfo, .texi, .txinfo, .w, .ch .web, .sh, .elc, .el.
#
CC	:= gcc
CXX	:= g++
 
CPPFLAGS	= -D DEBUG # -I "./include"
CFLAGS		= -pedantic -Wall -pthread -g -std=c99
CXXFLAGS	= -pedantic -Wall -pthread -g -std=c++0x
LDFLGAS		= # -L
LDLIBS		= #-l

OBJ_DIR = obj
DEPEND_FILE = depend_file

SRCS	:= $(wildcard *.c) $(wildcard *.cpp)
OBJS	:= $(SRCS:%.c=$(OBJ_DIR)/%.o)
OBJS	:= $(OBJS:%.cpp=$(OBJ_DIR)/%.o)
TARGET	:= tt.exe

MKDIR	:= mkdir
RM		:= rm -f

.PHONY: all depend clean

all: $(TARGET)

$(TARGET): $(OBJS)
	@echo [Link] $@ FROM: $^
	@test -d $(@D) || mkdir -p $(@D)
	$(CXX) -o $@ $^ $(LDFLGAS) $(LDLIBS)

$(OBJ_DIR)/%.o:%.c
	@echo [Compile C] $<
	@test -d $(@D) || mkdir -p $(@D)
	$(CC) -o $@ $< -c $(CFLAGS) $(CPPFLAGS)

$(OBJ_DIR)/%.o:%.cpp
	@echo [Compile C++] $<
	@test -d $(@D) || mkdir -p $(@D)
	$(CXX) -o $@ $< -c $(CXXFLAGS) $(CPPFLAGS)

depend:
	@`[ -d $(OBJ_DIR) ] || $(MKDIR) $(OBJ_DIR)`
	@$(RM) $(DEPEND_FILE)
	@$(foreach FILE, $(filter %.c,$(SRCS)), $(CC) -MM -MT obj/$(FILE:%.c=%.o) $(FILE) >> $(DEPEND_FILE);)	
	@$(foreach FILE, $(filter %.cpp,$(SRCS)), $(CXX) -MM -MT obj/$(FILE:%.cpp=%.o) $(FILE) >> $(DEPEND_FILE);)	

clean:
	@$(RM) -r $(OBJ_DIR) $(TARGET) $(DEPEND_FILE)	

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),depend)
ifneq ($(SRCS),)
-include $(DEPEND_FILE)
endif
endif
endif
