diff --git a/makefile b/makefile
index 45aeaa1d1ae966ab22ed5af77171fa9c7a5b3771..3a1166c44d73e6bcb60cc7a40de83eccb2121fbf 100644
--- a/makefile
+++ b/makefile
@@ -1,16 +1,20 @@
-CC=gcc
-CFLAGS=-c -Wall `sdl-config --cflags`
-LDFLAGS=`sdl-config --libs` -lSDL_gfx -lSDL_ttf -lSDL_image -lm
-SOURCES=main.c init.c colors.c label.c button.c menu.c field.c table.c input.c game.c highscore.c 
-OBJECTS=$(SOURCES:.c=.o)
-EXECUTABLE=minesweeper2d
+BINARY = MineSweeper2D
+OBJECTS = main.o button.o colors.o field.o game.o highscore.o init.o input.o label.o menu.o table.o
+HEADERS = button.h colors.h enums.h field.h game.h highscore.h init.h input.h label.h menu.h table.h
 
-all: $(SOURCES) $(EXECUTABLE)
-	
-$(EXECUTABLE): $(OBJECTS) 
-	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
+CC = gcc
+CFLAGS = -O2 `sdl-config --cflags`
+LDFLAGS = -lm `sdl-config --libs` -lSDL_ttf  -lSDL_gfx -lSDL_image
+
+.PHONY: all clean
+
+all: $(BINARY)
 
-.c.o:
-	$(CC) $(CFLAGS) $< -o $@
 clean:
-	rm -Rf *.o $(EXECUTABLE) @
\ No newline at end of file
+	rm -f $(BINARY) $(OBJECTS)
+
+$(BINARY): $(OBJECTS)
+	$(CC) $(LDFLAGS) $^ -o $@
+
+%.o: %.c $(HEADERS)
+	$(CC) $(CFLAGS) -c $< -o $@
\ No newline at end of file