.SUFFIXES:
.SUFFIXES:.c.cpp.o

# Ʒ  ¡  "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

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)

DEPS = $(OBJS:.o=.d)

MKDIR	:= mkdir
RM		:= rm -f

TARGET	:= tt.exe

.PHONY: all 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) -MMD

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

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

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(SRCS),)
-include $(DEPS)
endif
endif
