.PHONY: all clean # Define required raylib variables PROJECT_NAME ?= KleiaxSnake RAYLIB_VERSION ?= 4.2.0 RAYLIB_PATH ?= ..\.. # Define compiler path on Windows COMPILER_PATH ?= C:/raylib/w64devkit/bin PLATFORM ?= PLATFORM_DESKTOP DESTDIR ?= /usr/local RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include # Library type used for raylib: STATIC (.a) or SHARED (.so/.dll) RAYLIB_LIBTYPE ?= STATIC # Build mode for project: DEBUG or RELEASE BUILD_MODE ?= DEBUG ifeq ($(OS),Windows_NT) PLATFORM_OS=WINDOWS export PATH := $(COMPILER_PATH):$(PATH) endif RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH) # Define default C compiler: gcc # NOTE: define g++ compiler if using C++ CC = g++ # Define default make program: Mingw32-make MAKE = mingw32-make # Define compiler flags: # -O0 defines optimization level (no optimization, better for debugging) # -O1 defines optimization level # -g include debug information on compilation # -s strip unnecessary data from build -> do not use in debug builds # -Wall turns on most, but not all, compiler warnings # -std=c99 defines C language mode (standard C from 1999 revision) # -std=gnu99 defines C language mode (GNU C from 1999 revision) # -Wno-missing-braces ignore invalid warning (GCC bug 53119) # -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec CFLAGS += -Wall -Wno-missing-braces ifeq ($(BUILD_MODE),DEBUG) CFLAGS += -g -O0 else CFLAGS += -s -O1 endif # Define include paths for required headers # NOTE: Several external required libraries (stb and others) INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external INCLUDE_PATHS += -I./include # INCLUDE_PATHS += -I./src # Define library paths containing required libs. LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src # Define any libraries required on linking # if you want to link libraries (libname.so or libname.a), use the -lname ifeq ($(PLATFORM_OS),WINDOWS) # Libraries for Windows desktop compilation # NOTE: WinMM library required to set high-res timer resolution LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm endif # Define a recursive wildcard function rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)) # Define all source files required SRC_DIR = src OBJ_DIR = obj # Define all object files from source files # SRC = $(call rwildcard, *.c, *.h) SRC = $(call rwildcard, *.cpp, *.h) # OBJS = $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o) OBJS ?= main.cpp OBJS += src/Game.cpp OBJS += src/Board.cpp OBJS += src/raylibCpp.cpp OBJS += src/Snake.cpp MAKEFILE_PARAMS = $(PROJECT_NAME) all: $(MAKE) $(MAKEFILE_PARAMS) # Project target defined by PROJECT_NAME $(PROJECT_NAME): $(OBJS) $(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # Compile source files # NOTE: This pattern will compile every module defined on $(OBJS) #%.o: %.c $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) # Clean everything clean: ifeq ($(PLATFORM_OS),WINDOWS) del *.o *.exe /s endif @echo Cleaning done