# Detect OS ifeq ($(OS),Windows_NT) ISWIN := 1 endif ifdef ISWIN CC := i686-w64-mingw32-gcc else CC := gcc endif RM ?= rm -f RMDIR ?= rm -rf MKDIR ?= mkdir -p WARFLAGS := -Wall #-Wextra -pedantic CFLAGS_g := $(WARFLAGS) -std=gnu11 -O2 -msse2 -ffast-math -mfpmath=sse -DNDEBUG \ -MMD LDFLAGS_g := -s # object output dir OBJDIR_g := obj SRCS := $(wildcard *.c) SRCS += $(wildcard util/*.c) OBJS_t := $(SRCS:.c=.o) # include dirs CFLAGS_g += # libs ifdef ISWIN CFLAGS_g += -I../SDL2-2.0.8/include LDFLAGS_g += -L../SDL2-2.0.8/lib \ -lmingw32 -lSDL2main -lSDL2 -lopengl32 -mconsole else CFLAGS_g += -I/usr/include/SDL2 LDFLAGS_g += -lSDL2 endif # binary target ifdef ISWIN TARG_t := build/lmdave.exe else TARG_t := build/lmdave endif game: $(TARG_t) @echo "*** Target '$@': '$^' is up to date!" default: game .PHONY: default clean game # rewrite OBJS so it outputs object files to seperate dir OBJS_t := $(patsubst %,$(OBJDIR_g)/%,$(OBJS_t)) # include the dependency rules generated by -MMD -include $(OBJS_t:.o=.d) clean: @echo "*** Removing target binary and object directory..." @$(RM) $(TARG_t) @$(RMDIR) $(OBJDIR_g) @echo "*** Done." # Compile $(OBJDIR_g)/%.o: %.c @$(MKDIR) $(@D) @echo "*** Compiling '$<' ..." @$(CC) $(CFLAGS_g) -c $< -o $@ # Link $(TARG_t): $(OBJS_t) @$(MKDIR) $(@D) @echo "\n*** Linking binary target '$@' ...\n" @$(CC) $(OBJS_t) -o $@ $(LDFLAGS_g)