BIN = vbo SRC = vbo.c CC = gcc CFLAGS = -Wall -std=c99 -MD DBGFLAGS = -g -O0 ifdef DEBUG CFLAGS += $(DBGFLAGS) else CFLAGS += -O2 -march=native -mtune=native endif LDFLAGS = -lglew32 -lopengl32 -lglu32 -lm -lfreeglut -lmingw32 -lsdlmain -lsdl \ -lsdl_image -mwindows OBJ_DIR = obj DEPS_DIR = obj BIN_DIR = . C_FILES = $(filter %.c, $(SRC)) DEP_FILES = $(addprefix $(DEPS_DIR)\, $(addsuffix .d, $(notdir $(subst .c,,$(SRC))))) OBJ_FILES = $(addprefix $(OBJ_DIR)\, $(addsuffix .o, $(notdir $(subst .c,,$(SRC))))) INCL = -I/include define C_template $(1): $(2) @mkdir -p $$(OBJ_DIR) @mkdir -p $$(DEPS_DIR) $$(CC) -c $$(CFLAGS) $$(INCL) $$< -o $$@ endef all: $(BIN) $(foreach cfile, $(C_FILES), $(eval $(call C_template, $(OBJ_DIR)\$(notdir $(subst .c,,$(cfile))).o, $(cfile)))) $(BIN): $(OBJ_FILES) @mkdir -p $(BIN_DIR) $(CC) -o $(BIN_DIR)/$@ $(OBJ_FILES) $(LDFLAGS) .PHONY: clean clean: rm -rf $(OBJ_DIR) rm -f $(BIN_DIR)/$(BIN).exe stdout.txt stderr.txt -include $(DEP_FILES)