--- a/Makefile.lib	2014-05-30 13:45:11.756422117 -0400
+++ b/Makefile.lib	2014-05-30 13:47:22.626423230 -0400
@@ -117,7 +117,7 @@
  $(sort $(filter-out $(LIB_O_NAME),$(OBJS))) \
  $(foreach subdir,$(sort $(SUBDIRS)),$(wildcard $(subdir)/$(LIB_O_NAME)))
 
-$(LIB_O_NAME): $(LIB_O_DEPS)
+$(LIB_O_NAME): all-recursive.built $(LIB_O_DEPS)
 	$(call cmd,ld_objs)
 
 DEP_FILES_1 = $(foreach src,$(OBJS),.deps/$(src))
@@ -260,21 +260,36 @@
 # remaining subdirectories, but return an error at the end.
 $(RULES_REC):
 ifneq (,$(findstring k,$(MAKEFLAGS)))
-	@suberr=0; \
+	@+suberr=0; \
 	$(foreach subdir,$(sort $(SUBDIRS)), \
 		$(call ncmd,recmake,$(subdir),$(subst -recursive,,$@)) || suberr=1;) \
 	exit $$suberr
 else
-	@$(foreach subdir,$(sort $(SUBDIRS)), \
+	@+$(foreach subdir,$(sort $(SUBDIRS)), \
 		$(call ncmd,recmake,$(subdir),$(subst -recursive,,$@)) || exit 1;)
 endif
 
+all-recursive.built:
+ifneq (,$(findstring k,$(MAKEFLAGS)))
+	@+suberr=0; \
+	$(foreach subdir,$(sort $(SUBDIRS)), \
+		$(call ncmd,recmake,$(subdir),$(subst -recursive.built,,$@)) || suberr=1;) \
+	[ $$suberr == 0 ] && touch $@; \
+	exit $$suberr
+else
+	@+$(foreach subdir,$(sort $(SUBDIRS)), \
+		$(call ncmd,recmake,$(subdir),$(subst -recursive.built,,$@)) || exit 1;) \
+	touch $@
+endif
+
+CLEAN += all-recursive.built
+
 # Dummy -local rules
 $(RULES_LOCAL):
 
 # Default deps
 rule_deps = $(1)-recursive $(1)-default $(1)-local
-all:	  $(call rule_deps,all)
+all:	  $(subst recursive,recursive.built,$(call rule_deps,all))
 install:  $(call rule_deps,install)
 clean:	  $(call rule_deps,clean)
 cleanall: $(call rule_deps,cleanall)
