Change:
There comes a time in the life of every Rust developer when they have to blow away various parts of the directory to avoid messages about "multiple matching crates". Then when they do the next build they get things like: . It would be better if the Makefile would just create all the needed parent directories automatically.
+1
I'm pretty sure I know how to do this. (I think the right tools for the job are some in and )
I haven't actually waited for a whole build to go through yet, and I have to leave for the evening. But I'd welcome it if you would be willing to pull this (SHA: ) into your repo and give it a spin. If you don't get around to it, no sweat; it can obviously wait until Monday.
argh ignore comment above; the commit isn't anywhere near fully baked yet; somethings off with my make syntax.
Okay. It would be nice to do this in the interim, but eventually when rustpkg is the build system it will do this (much more easily than with Makefile hacking), so no sweat if you don't get it done :-)

Discussion:
$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4))  $$(HCORELIB_DEFAULT$(2)_H_$(4))  $$(HSTDLIB_DEFAULT$(2)_H_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@

$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4))  $$(HCORELIB_DEFAULT$(2)_H_$(4))  $$(HSTDLIB_DEFAULT$(2)_H_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) 

$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)):  $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)):  $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_CORELIB_$(4))  $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ # Subtle: We do not let the shell expand $(CORELIB_DSYM_GLOB) directly rather

$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4))  $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4))  $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) 

$$(HLIB$(2)_H_$(4))/libcore.rlib:  $$(TLIB$(1)_T_$(4)_H_$(3))/libcore.rlib  $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@

$$(TLIB$(1)_T_$(4)_H_$(3))/libstd.rlib  $$(HLIB$(2)_H_$(4))/libcore.rlib  $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@

$$(HLIB$(2)_H_$(4))/libcore.rlib  $$(HLIB$(2)_H_$(4))/libstd.rlib  $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)):  $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4))  <del> | $$(HBIN$(2)_H_$(4))/ </del> <ins> | $$(HLIB$(2)_H_$(4))/ </ins> @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HBIN$(2)_H_$(4))/: mkdir -p $$@ <ins> $$(HLIB$(2)_H_$(4))/: mkdir -p $$@ </ins> endef $(foreach t,$(CFG_HOST_TRIPLES),					

$$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(3)):			 $$(DRIVER_CRATE)				 $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3))  <del> | $$(TLIB$(1)_T_$(2)_H_$(3))/ </del> <ins> | $$(TBIN$(1)_T_$(2)_H_$(3))/ </ins> @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) --cfg rustc -o $$@ $$< ifdef CFG_ENABLE_PAX_FLAGS

endif <ins> $$(TBIN$(1)_T_$(2)_H_$(3))/: mkdir -p $$@ </ins> $$(TLIB$(1)_T_$(2)_H_$(3))/: mkdir -p $$@