--- /dev/null
+CC := g++
+CCFLAGS := -std=c++17 -Wall -Wextra -pedantic -Weffc++ -Wold-style-cast -I src
+LDFLAGS := -L${SFML_ROOT}/lib -I${SFML_ROOT}/include -lsfml-window -lsfml-graphics -lsfml-system
+
+OBJDIR := build
+EXEDIR := build/exe
+EXE := $(EXEDIR)/game.out
+TEST := $(EXEDIR)/test.out
+
+SRC := $(shell find src -type f -name '[^_]*.cc')
+SRC_H := $(shell find src -type f -name '[^_]*.h')
+OBJECTS := $(addprefix $(OBJDIR)/, $(SRC:src/%.cc=%.o) )
+
+vpath %.cc src
+
+.PHONY: all clean
+
+all: dir game-target test-target
+
+dir:
+ mkdir -p $(OBJDIR)
+ mkdir -p $(EXEDIR)
+
+game: dir
+ @$(MAKE) --no-print-directory game-target
+
+testing: dir
+ @$(MAKE) --no-print-directory test-target
+
+game-target: $(OBJDIR)/_main.o $(OBJECTS)
+ $(CC) $(LDFLAGS) $^ -o $(EXE) $(LDFLAGS)
+
+test-target: $(OBJDIR)/_test.o $(OBJECTS)
+ $(CC) $(LDFLAGS) $^ -o $(TEST) $(LDFLAGS)
+
+$(OBJDIR)/%.o: %.cc $(SRC_H)
+ $(CC) $(CCFLAGS) -c -o $@ $<
+
+run:
+ ./$(EXE)
+
+test:
+ ./$(TEST)
+
+clean:
+ rm -rf $(OBJDIR)/*
\ No newline at end of file