diff --git a/common.mk b/common.mk
index c048330de19404513c3a033889ba4cf329374aa9..cc36712aa98e8f00bc30c09c8d42f4e5c2844312 100644
--- a/common.mk
+++ b/common.mk
@@ -11,4 +11,7 @@ CFLAGS += -DINCLUDE_TESTS
 	ar crv $@ $^
 
 %.o: %.c
-	$(CC) $(CFLAGS) -c -o $@ $<
\ No newline at end of file
+	$(CC) $(CFLAGS) -c -o $@ $<
+
+clean:
+	-rm -f $(OUTPUTS)
diff --git a/lib/Makefile b/lib/Makefile
index e8c0b5137d1e72d25d0262cb0caf2a831c9b4c68..d95ec6b482afe493a3cbc25b74e48dcbd0617a34 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,4 +1,7 @@
 include ../common.mk
 
+OUTPUTS := \
+	allocator.o
+
 all: allocator.o
 
diff --git a/src/Makefile b/src/Makefile
index 319cc722be1306fae4feae99f44333d9fd60b829..fcfda82804a7197a27ab45d6980f6b67060e26b3 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,9 +1,13 @@
 -include ../common.mk
 
+OUTPUTS := bitreader.o \
+	   libhammer.a \
+	   test_suite
+
 all: libhammer.a test_suite
 
 test_suite: test_suite.o libhammer.a
-	$(CC) $(LDFLAGS) -o $@ $^
+	$(CC) -o $@ $^ $(LDFLAGS)
 
 libhammer.a: bitreader.o