diff --git a/makefile b/makefile
index 059d5f490d45065c8c98ac5f7484c6fa975fd365..1963306d121e30194cbda63d62f51d0e92902124 100644
--- a/makefile
+++ b/makefile
@@ -1,32 +1,30 @@
 all: mojitos
 
-mojitos_group:mojitos.c counters_group.o counters.h rapl.o rapl.h network.h network.o counters_option.h load.o
-	gcc $(DEBUG) -O3 -Wall -o mojitos_group mojitos.c counters_group.o rapl.o network.o load.o -lpowercap
+OBJECTS = mojitos.o counters_individual.o counters.h rapl.o rapl.h network.h network.o  load.o
 
-mojitos:mojitos.c counters_individual.o counters.h rapl.o rapl.h network.h network.o counters_option.h load.o
-	gcc $(DEBUG) -O3 -Wall -o mojitos mojitos.c counters_individual.o rapl.o network.o load.o -lpowercap
+mojitos:$(OBJECTS) counters_option.h
+	gcc $(DEBUG) -O3 -Wall -o mojitos $(OBJECTS) -lpowercap
 
-counters_option.h: counters_option.py
-	./counters_option.py > counters_option.h
+OBJECTS_GRP = $(subst _individual,_group, $(OBJECTS))
+mojitos_group: $(OBJECTS_GRP) counters_option.h
+	gcc $(DEBUG) -O3 -Wall -o mojitos_group $(OBJECTS_GRP) -lpowercap
 
-debug: DEBUG = -DDEBUG
+counters_%.o: counters_%.c counters.h
+	gcc -c -O3 -Wall $< -o $@
 
-debug: all
+counters_option.h: counters_option.py
+	./counters_option.py > counters_option.h
 
-load.o: load.c load.h
-	gcc -O3 -Wall -c load.c
 
-rapl.o: rapl.c rapl.h 
-	gcc -O3 -Wall -c rapl.c
+mojitos.o: mojitos.c counters_option.h
+	gcc -c -O3 -Wall $< -o $@
 
-network.o: network.c network.h
-	gcc -Wall -c network.c
+debug: DEBUG = -DDEBUG
 
-counters_individual.o:counters_individual.c counters.h
-	gcc -O3 -Wall -c counters_individual.c
+debug: all
 
-counters_group.o:counters_group.c counters.h
-	gcc -O3 -Wall -c counters_group.c
+%.o : %.c %.h
+	gcc -c -O3 -Wall $< -o $@
 
 clean:
 	\rm -f *~ *.o mojitos_group mojitos counters_option.h