diff --git a/makefile b/makefile
index add062e3e9e297fc119f17c34cd008c0f4febfa5..972e713fd43e2d1a62e19f7e57e8b866a6c119c9 100644
--- a/makefile
+++ b/makefile
@@ -4,44 +4,42 @@ CC = gcc
 CFLAGS = -Wall -Wextra -std=gnu11 -g -fsanitize=address -fsanitize=leak
 LDFLAGS = -lm
 LIBS = -lSDL2
+VPATH:=vec2 gfx
 
-TARGET = main
 BIN = bin
-RUN = ./$(BIN)/$(TARGET)
 
 # Get source and object
-SRCS = $(filter-out $(wildcard */test.c), $(wildcard *.c */*.c))
+SRCS = $(filter-out $(wildcard */*_tests.c */*test.c */*tests.c */*_test.c), $(wildcard *.c */*.c))
 OBJS = $(addprefix $(BIN)/, $(SRCS:.c=.o))
+SRCS_TEST = $(filter-out $(wildcard main.c */main.c gfx/*), $(wildcard *.c */*.c))
+OBJS_TEST = $(addprefix $(BIN)/, $(SRCS_TEST:.c=.o))
 
-PHONY := $(TARGET)
 # Create the target
-$(TARGET): $(OBJS)
-	$(CC) $(CFLAGS) -o $(BIN)/$@ $(OBJS) $(LIBS) $(LDFLAGS)
+main: $(OBJS)
+	$(CC) $(CFLAGS) -o $(BIN)/$@ $^ $(LIBS) $(LDFLAGS)
+	./$(BIN)/$@
 
 # Convert the source in object, but before all, run `$(BIN)` aka mkdir
 $(BIN)/%.o: %.c
 	mkdir -p $(@D)
-	$(CC) $(CFLAGS) -o $@ -c $< $(LDFLAGS)
+	$(CC) $(CFLAGS) -o $@ -c $< $(LDFLAGS) -lSDL2
 
-PHONY += help
 # Echo the source and object values
 help:
 	@echo "src: $(SRCS)"
 	@echo "obj: $(OBJS)"
+	@echo "obj_test: $(OBJ_TEST)"
 
-PHONY += run
 # Run the program
 run:
 	$(RUN)
 
-PHONY += clean
 clean:
 	rm -rf $(BIN)
 
-PHONY += test-draw
 test-draw: draw/test.c $(BIN)/draw/draw.o $(BIN)/gfx/gfx.o
 	$(CC) $(CFLAGS) -o $(BIN)/draw/$@.o -c $< $(LDFLAGS)
 	$(CC) $(CFLAGS) -o $(BIN)/draw/test $(BIN)/draw/$@.o $(BIN)/draw/draw.o $(BIN)/gfx/gfx.o $(LIBS) $(LDFLAGS)
 	./$(BIN)/draw/test
 	
-.PHONY: $(PHONY)
+.PHONY: test-draw help clean main