diff --git a/Makefile b/Makefile
index 9fee9e6c33da0d769d99527e814b58cdf48a1140..09c96dfe8320a56c42307ced99e969b50a6f14a9 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,12 @@ all:
 	@echo >&2
 	@exit 1
 
+%.CLEAN:
+	for d in $$(./tools/find_linux_targets $*) \
+		 $$(./tools/find_avr_targets $*) ; do \
+	    make -C $${d} $@ ; \
+	done
+
 %.LOAD:
 	make -C $$(./tools/find_avr_targets $*) $@
 
@@ -22,3 +28,4 @@ all:
 
 %.LINUX:
 	make -C $$(./tools/find_linux_targets $*) $@
+
diff --git a/lib/avr/Makefile.common b/lib/avr/Makefile.common
index 159b24db12603b8b8a15bba5974a02e51ead34bc..6341ec794db8c3764ee9eff191086a4a4a24a6fe 100644
--- a/lib/avr/Makefile.common
+++ b/lib/avr/Makefile.common
@@ -16,6 +16,9 @@ ifeq ($(TARGET),)
 all:	$(TARGETS:%=%.LINK)
 
 
+%.CLEAN:
+	rm -rf compiled/$*
+
 %.LINK:
 	@mkdir -p compiled/$*
 	make --no-print-directory TARGET=$* $*.LINK
diff --git a/pcio/linux/Makefile b/pcio/linux/Makefile
index 7a3863d021ef79626f08b6ca53d5ff4bca62b499..c00b3abe53f57f3222d8aa81c6c6e8e982e94475 100644
--- a/pcio/linux/Makefile
+++ b/pcio/linux/Makefile
@@ -9,6 +9,10 @@ all: pciotest.LINUX
 %.LINUX: compiled/% | compiled
 	@/bin/true
 
+.PHONY: %.CLEAN
+%.CLEAN: clean
+	@/bin/true
+
 .PRECIOUS: compiled/%
 compiled/%:	%.c | compiled
 	echo $*
diff --git a/tools/find_avr_targets b/tools/find_avr_targets
index 2fbe8f8f8f76d94426e8ceef1dc25661a6605364..eff8e4d96141711377f1bb12a0a3d5d9a0c5b205 100755
--- a/tools/find_avr_targets
+++ b/tools/find_avr_targets
@@ -16,7 +16,9 @@ all_avr_programs() {
 }
 
 target_dir() {
-    dirname $(egrep -l "$1.CHIP=" ${ROOTDIR}/*/avr/Makefile)
+    local MAKEFILE
+    MAKEFILE=$(egrep -l "$1.CHIP=" ${ROOTDIR}/*/avr/Makefile)
+    [ -n ${MAKEFILE} ] && dirname ${MAKEFILE}
 }
 
 if [ $# -eq 0 ] ; then
diff --git a/tools/find_linux_targets b/tools/find_linux_targets
index f26855381360bb1ca5ad84e0974cc5eda57c5559..3613fc63c82df4f1c80c87a5ebd82ea3397977e6 100755
--- a/tools/find_linux_targets
+++ b/tools/find_linux_targets
@@ -17,7 +17,9 @@ all_linux_programs() {
 }
 
 target_dir() {
-    dirname $(egrep -l "^CFLAGS.$1=" ${ROOTDIR}/*/linux/Makefile)
+    local MAKEFILE
+    MAKEFILE=$(egrep -l "^CFLAGS.$1=" ${ROOTDIR}/*/linux/Makefile)
+    [ -n ${MAKEFILE} ] && dirname ${MAKEFILE}
 }
 
 if [ $# -eq 0 ] ; then