diff --git a/adiff.automaton/makefile b/adiff.automaton/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..52c27e2a8ca1964d330b235b420f73aaad39523d
--- /dev/null
+++ b/adiff.automaton/makefile
@@ -0,0 +1,20 @@
+CC=g++
+EXECUTIBLE=adiff.automaton
+CCFLAGS= -std=c++11 -O2 -c -Wall -I../alib/src 
+LDFLAGS= -L../alib/lib -lxml2 -lalib
+
+SOURCES=$(shell find src/ -name *cpp)
+OBJECTS=$(patsubst src/%.cpp, obj/%.o, $(SOURCES))
+
+all: $(SOURCES) bin/$(EXECUTIBLE)
+
+bin/$(EXECUTIBLE): $(OBJECTS)
+	mkdir -p bin
+	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
+
+obj/%.o: src/%.cpp
+	mkdir -p $(dir $@)
+	$(CC) $(CCFLAGS) $< -o $@
+
+clean:
+	$(RM) -r *.o *.d bin obj
diff --git a/adiff.grammar/makefile b/adiff.grammar/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..63f9acd23302a1aed5644072b073805db17d0fa1
--- /dev/null
+++ b/adiff.grammar/makefile
@@ -0,0 +1,20 @@
+CC=g++
+EXECUTIBLE=adiff.grammar
+CCFLAGS= -std=c++11 -O2 -c -Wall -I../alib/src 
+LDFLAGS= -L../alib/lib -lxml2 -lalib
+
+SOURCES=$(shell find src/ -name *cpp)
+OBJECTS=$(patsubst src/%.cpp, obj/%.o, $(SOURCES))
+
+all: $(SOURCES) bin/$(EXECUTIBLE)
+
+bin/$(EXECUTIBLE): $(OBJECTS)
+	mkdir -p bin
+	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
+
+obj/%.o: src/%.cpp
+	mkdir -p $(dir $@)
+	$(CC) $(CCFLAGS) $< -o $@
+
+clean:
+	$(RM) -r *.o *.d bin obj
diff --git a/adiff/makefile b/adiff/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..26b6837de0d3f63d299a169215fe3def32bbb480
--- /dev/null
+++ b/adiff/makefile
@@ -0,0 +1,20 @@
+CC=g++
+EXECUTIBLE=adiff
+CCFLAGS= -std=c++11 -O2 -c -Wall -I../alib/src 
+LDFLAGS= -L../alib/lib -lxml2 -lalib
+
+SOURCES=$(shell find src/ -name *cpp)
+OBJECTS=$(patsubst src/%.cpp, obj/%.o, $(SOURCES))
+
+all: $(SOURCES) bin/$(EXECUTIBLE)
+
+bin/$(EXECUTIBLE): $(OBJECTS)
+	mkdir -p bin
+	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
+
+obj/%.o: src/%.cpp
+	mkdir -p $(dir $@)
+	$(CC) $(CCFLAGS) $< -o $@
+
+clean:
+	$(RM) -r *.o *.d bin obj
diff --git a/makefile b/makefile
index e71c9b62c5adaa86a5b618f9591e40b404fe1d9f..6ef770535ce5f8d8b838f16de868445fb89b3687 100644
--- a/makefile
+++ b/makefile
@@ -2,24 +2,28 @@ APPPATH = /usr/bin
 LIBPATH = /usr/lib/
 BINFOLDER = bin
 
-SUBDIRS = alib acat aconvert aconvert.dot aconvert.gastex aminimize adeterminize adeterminize.fsm
-.PHONY: subdirs $(SUBDIRS)
-     
-all: $(SUBDIRS) copy
+SUBDIRS_LIBS = alib adeterminize
+SUBDIRS_BINS = acat aconvert aconvert.dot aconvert.gastex aminimize adeterminize.fsm adiff adiff.automaton adiff.grammar
 
-$(SUBDIRS):
+.PHONY: $(SUBDIRS_LIBS) $(SUBDIRS_BINS)
+
+all: $(SUBDIRS_LIBS) $(SUBDIRS_BINS) copy
+
+$(SUBDIRS_LIBS):
 	$(MAKE) -C $@
+
+$(SUBDIRS_BINS):
+	$(MAKE) -C $@
+
 copy:
 	rm -rf $(BINFOLDER)
 	mkdir $(BINFOLDER)
-	cp alib/lib/libalib.so $(BINFOLDER)
-	cp adeterminize/lib/libadeterminize.so $(BINFOLDER)
-	cp acat/bin/acat $(BINFOLDER)
-	cp aconvert/bin/aconvert $(BINFOLDER)
-	cp aconvert.dot/bin/aconvert.dot $(BINFOLDER)
-	cp aconvert.gastex/bin/aconvert.gastex $(BINFOLDER)
-	cp aminimize/bin/aminimize $(BINFOLDER)
-	cp adeterminize.fsm/bin/adeterminize.fsm $(BINFOLDER)
+	for dir in $(SUBDIRS_LIBS); do \
+	    cp $$dir/lib/* $(BINFOLDER); \
+	done
+	for dir in $(SUBDIRS_BINS); do \
+	    cp $$dir/bin/* $(BINFOLDER); \
+	done
 
 install:
 	cp alib/lib/libalib.so $(LIBPATH)