#.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.
#

# Ʒ  ¡  "make DEBUG_FLAG=yes"  ϸ, -g ɼ Ȱȭ ȴ.

CC	:= gcc
CXX	:= g++
 
ifdef DEBUG_FLAG
DEBUG_OPT	:= -g
DEBUG_DEF	:= -D DEBUG
endif

CPPFLAGS	= $(DEBUG_DEF) -I "./sub"
CFLAGS		= -pedantic -Wall -pthread $(DEBUG_OPT) -std=c99
CXXFLAGS	= -pedantic -Wall -pthread $(DEBUG_OPT) -std=c++0x
LDFLGAS		= # -L
LDLIBS		= # -l

SRC_DIR		= . ./sub
OBJ_DIR		= obj
DEPEND_FILE = depend_file

#SRCS	:= $(wildcard *.c) $(wildcard *.cpp)
#SRCS	:= $(foreach dir,$(SRC_DIR),$(notdir $(wildcard $(dir)/*.c )))
SRCS	:= $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c )) \
		   $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.cpp ))
SRCS	:= $(subst ./,,$(SRCS))
OBJS	:= $(SRCS:%.c=$(OBJ_DIR)/%.o)
OBJS	:= $(OBJS:%.cpp=$(OBJ_DIR)/%.o)
OBJS	:= $(OBJS:%.cpp=$(OBJ_DIR)/%.o)

MKDIR	:= mkdir
RM		:= rm -f

TARGET	:= tt.exe

.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) $(CPPFLAGS) -MM -MT $(OBJ_DIR)/$(FILE:%.c=%.o) $(FILE) >> $(DEPEND_FILE);)	
	@$(foreach FILE, $(filter %.cpp,$(SRCS)), $(CXX) $(CPPFLAGS) -MM -MT $(OBJ_DIR)/$(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
