diff --git a/Makefile b/Makefile
index 6ae4165ecd426828fb1f7b6ed51ef7ddb8e48573..db1aab3e3a10d01c6851dc8d54b3ddc35873a7eb 100644
--- a/Makefile
+++ b/Makefile
@@ -9,8 +9,21 @@ WARNFLAGS := -Wall -Wpedantic -Wextra -Waddress -Waggressive-loop-optimizations
 
 all: lavie
 
-lavie:
-	echo "#!/bin/sh" > $@ && echo "true" >> $@ && chmod u+x $@
+lavie: main.o grille.o io.o jeu.o 
+	gcc -g -o lavie main.o grille.o io.o jeu.o -lm
+
+main.o: main.c grille.h io.h jeu.h
+	gcc -g -c main.c
+
+grille.o: grille.c grille.h
+	gcc -g -c grille.c
+
+io.o: io.c io.h
+	gcc -g -c io.c
+
+jeu.o:jeu.c jeu.h
+	gcc -g -c jeu.c
+
 
 check: lavie
 	@./test/test_gol_execution.sh
@@ -18,3 +31,6 @@ check: lavie
 clean:
 	@$(RM) -f lavie *.o
 	@echo Clean!
+dist:
+	tar -c grille.c grille.h grilles/ io.c io.h main.c Makefile jeu.c jeu.h test/ -f tang_lavie.tar.gz -z
+
diff --git a/grille.c b/grille.c
index 889fcb4c6d827049cad98d5bf32bb88cc72a593b..fec0f716676bf3c56fc41b9b023d6583d6e881e5 100644
--- a/grille.c
+++ b/grille.c
@@ -6,9 +6,24 @@
 
 #include "grille.h"
 
-void alloue_grille(int l, int c, grille *g) { g->cellules = NULL; }
+void alloue_grille(int l, int c, grille *g) { 
+      g->nbl=l;
+      g->nbc=c;
+      g->cellule=malloc(l*sizeof(int*));
+      int i;
+      for(i = 0;i<c;i++){
+      g->cellule[i]=malloc(c*sizeof(int));
+        }
+}
+
+void libere_grille(grille *g) { 
+int i;
+for(i=0;i<g->nbl;i++){
+free(g->cellule[i]);
 
-void libere_grille(grille *g) { g->cellules = NULL; }
+}
+free(g->cellule);
+}
 
 void init_grille_from_file(char const *const filename, grille *const g) {
   FILE *pfile = fopen(filename, "r");