COMPILE_STD_OPTIONS = -std=c++11
COMPILE_WARN_OPTIONS = -Wall
COMPILE_DEBUG_OPTIONS = -g -O0
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
SRCS = $(notdir $(SRC_FILES))
OBJ_FILES = $(SRCS:.cpp=.o)
DEP_FILES = $(SRCS:.cpp=.d)
SRC_OBJ_FILES = $(SRC_FILES:.cpp=.o)
OBJ_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(OBJ_FILES))
DEP_OUTPUT_FILES = $(addprefix $(OUTPUT_DIR)/,$(DEP_FILES))
MARRCO_OPTIONS = $(addprefix -D, $(MARRCOS))
INCLUDE_DIR_OPTIONS = $(addprefix -I, $(INCLUD_DIR))
COMPILE_OPTIONS = $(COMPILE_STD_OPTIONS) \
$(COMPILE_WARN_OPTIONS) \
$(COMPILE_DEBUG_OPTIONS) \
STATIC_LIB_DIR_OPTINOS = $(addprefix -L, $(STATIC_LIB_DIR))
SHARED_LIB_DIR_OPTINOS = $(addprefix -L, $(SHARED_LIB_DIR))
STATIC_LIBS_OPTIONS = $(addprefix -l, $(STATIC_LIBS))
SHARED_LIBS_OPTIONS = $(addprefix -l, $(SHARED_LIBS))
LINK_OPTIONS = $(STATIC_LIB_DIR_OPTINOS) $(SHARED_LIB_DIR_OPTINOS ) $(STATIC_LIBS_OPTIONS) $(SHARED_LIBS_OPTIONS) -Wl,--gc-sections
TARGET = $(OUTPUT_DIR)/main.exe
$(TARGET): $(OBJ_OUTPUT_FILES)
$(COMPILER) $^ -o $@ $(LINK_OPTIONS)
$(OUTPUT_DIR)/%.o : $(SRC_DIR)/%.cpp $(OUTPUT_DIR)/%.d
@$(COMPILER) $(COMPILE_OPTIONS) -c $< -o $@
$(OUTPUT_DIR)/%.d : $(SRC_DIR)/%.cpp
$(COMPILER) $(COMPILE_OPTIONS) -MM $< > $@.$$$$; \
sed 's,.*\.o:,$*.o $@: ,g' < $@.$$$$ > $@; \
-include $(DEP_OUTPUT_FILES)
ifneq ($(OUTPUT_DIR), $(wildcard $(OUTPUT_DIR)))
@echo "SRC_FILES:$(SRC_FILES)"
@echo "OBJ_FILES:$(OBJ_FILES)"
@echo "DEP_FILES:$(DEP_FILES)"
@echo "SRC_OBJ_FILES:$(SRC_OBJ_FILES)"
@echo "OBJ_OUTPUT_FILES:$(OBJ_OUTPUT_FILES)"
@echo "DEP_OUTPUT_FILES:$(DEP_OUTPUT_FILES)"