diff --git a/GMLMIP-0.1/makefile b/GMLMIP-0.1/makefile
index 9576cd75c7c35575f0b89d01e21307a42ec6d944..1d1263ec89d6d184683061c12c4f993f78f58039 100644
--- a/GMLMIP-0.1/makefile
+++ b/GMLMIP-0.1/makefile
@@ -4,12 +4,29 @@ GCCFLAGS = -Wall -Wno-deprecated
 POBJS = ./parser/lex.yy.o ./parser/mlf-parser.tab.o ./parser/mlf-driver.o
 FOBJS = ./formulas/formula.o ./formulas/GML_formula.o ./formulas/PML_formula.o ./formulas/rational.o ./formulas/satisfyingassignment.o
 ROBJS = ./rules/premise.o ./rules/GML_premise.o ./rules/PML_premise.o ./rules/valuation.o ./rules/setofconclusions.o ./rules/sizefunctions.o ./rules/radixtree.o
+SUBDIRS = parser formulas rules
+
+.PHONY: all clean parser formulas rules
+
+all: main
+
+parser:
+	make -C parser
+
+formulas:
+	make -C formulas
+
+rules:
+	make -C rules
 
 main: main.o $(POBJS) $(FOBJS) $(ROBJS)
 	$(GCC) $(GCCFLAGS) $(POBJS) $(FOBJS) $(ROBJS) -lbdd -lm -lglpk main.o -o main
 
-main.o: main.cpp ./parser/mlf-driver.h ./formulas/formula.h ./formulas/satisfyingassignment.h
+main.o: main.cpp ./parser/mlf-driver.h ./formulas/formula.h ./formulas/satisfyingassignment.h $(SUBDIRS)
 	$(GCC) $(GCCFLAGS) -c main.cpp
 
 clean:
-	rm -rf *~ *.o main
+	rm -rf *.o main
+	make -C parser clean
+	make -C formulas clean
+	make -C rules clean
diff --git a/Makefile b/Makefile
index 17cd40dcd558b8e507dc79ca97c8723847aaaa1f..0a51470c9df812c5fd41c40ca20767972cf4ea54 100644
--- a/Makefile
+++ b/Makefile
@@ -55,7 +55,11 @@ LIBSMLI := $(patsubst %.mli,%.cmi,$(SOURCESMLI))
 LIBSML := $(patsubst %.ml,%$(SUFFIX),$(SOURCESML))
 
 .PHONY: all
-all: $(PROGS)
+all: $(PROGS) gmlmip
+
+.PHONY: gmlmip
+gmlmip:
+	make -C GMLMIP-0.1
 
 minisat.cma: minisat.cmo minisat_stub.o
 	$(OCAMLC) -a -o minisat.cma minisat.cmo minisat_stub.o -custom -cclib -lminisat
@@ -102,6 +106,7 @@ clean:
 	$(RM) -f .depend
 	$(RM) -f $(PROGS)
 	$(RM) -f *.a
+	make -C GMLMIP-0.1 clean
 
 .PHONY: depend
 depend: .depend