diff --git a/Usermode/rules.mk b/Usermode/rules.mk
index 4185287ced9c1c645c03872ab5f07eb42e4c642e..123954afcc6164ff3dd6e7d05f7376ea13e3599e 100644
--- a/Usermode/rules.mk
+++ b/Usermode/rules.mk
@@ -104,22 +104,26 @@ $(foreach f,$(ALL_BIN), $(eval $f: $(EXTRA_DEP-$(_DIR-$f)) $(call fcn_getlibs,$f
 %.a:
 	$(eval _dir=$(_DIR-$@))
 	@echo [AR] ru $@
+	@mkdir -p $(dir $@)
 	@$(RM) $@
 	@$(AR) ru $@ $(OBJ-$@)
 # Dynamic Library (.so)
 %.so:
 	$(eval _dir=$(_DIR-$@))
 	@echo [LD] -shared -o $@
+	@mkdir -p $(dir $@)
 	@$(LD) $(LDFLAGS) -shared -soname $(notdir $@) -o $@ $(OBJ-$@) $(LDFLAGS-$(_dir))
 # Executable (.bin)
 %.bin:
 	$(eval _dir=$(_DIR-$@))
 	@echo [LD] -o $@
+	@mkdir -p $(dir $@)
 	@$(LD) $(LDFLAGS) -o $@ $(OBJ-$@) $(LDFLAGS-$(_dir))
 	@$(CP) $@ $(@:%.bin=%)   
 $(OUTPUTDIR)%:
 	$(eval _dir=$(_DIR-$@))
 	@echo [LD] -o $@
+	@mkdir -p $(dir $@)
 	@$(LD) $(LDFLAGS) -o $@ $(OBJ-$@) $(LDFLAGS-$(_dir))
 
 -include $(ALL_OBJ:%=%.dep)