-OcamlSources := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
-OcamlHeaders := $(OcamlSources:.ml=.mli)
-
-# Output and intermediate files
-# The .cmo files are the only intermediates; all others get installed.
-BareLibraryA := lib$(LIBRARYNAME).a
-LibraryA := $(OcamlDir)/$(BareLibraryA)
-LibraryCMA := $(OcamlDir)/$(LIBRARYNAME).cma
-LibraryCMXA := $(OcamlDir)/$(LIBRARYNAME).cmxa
-ObjectsCMI := $(OcamlSources:$(PROJ_SRC_DIR)/%.ml=$(OcamlDir)/%.cmi)
-ObjectsCMO := $(OcamlSources:$(PROJ_SRC_DIR)/%.ml=$(ObjDir)/%.cmo)
-ObjectsCMX := $(OcamlSources:$(PROJ_SRC_DIR)/%.ml=$(OcamlDir)/%.cmx)
-
-# Dependencies
-# Punting on ocamldep, since its output is only suitable for builds where
-# objects are placed directly adjacent to sources, which is not us.
-# Unfortunately, this is subtly incorrect and leads to occasional problems.
-# ocamlc/ocamlopt really need an option akin to gcc -M or gcc -MD.
-$(ObjectsCMO): $(ObjectsCMI) $(UsedOcamLibs:%=$(OcamlDir)/%.cmi)
-$(ObjectsCMX): $(ObjectsCMI) $(UsedOcamLibs:%=$(OcamlDir)/%.cmi)
+OcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
+OcamlHeaders1 := $(OcamlSources1:.ml=.mli)
+
+OcamlSources := $(OcamlSources1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
+OcamlHeaders := $(OcamlHeaders1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
+
+# Intermediate files
+LibraryCMA := $(ObjDir)/$(LIBRARYNAME).cma
+LibraryCMXA := $(ObjDir)/$(LIBRARYNAME).cmxa
+ObjectsCMI := $(OcamlSources:%.ml=%.cmi)
+ObjectsCMO := $(OcamlSources:%.ml=%.cmo)
+ObjectsCMX := $(OcamlSources:%.ml=%.cmx)
+
+# Output files
+# The .cmo files are the only intermediates; all others are to be installed.
+LibraryA := $(OcamlDir)/lib$(LIBRARYNAME).a
+OutputCMA := $(LibraryCMA:$(ObjDir)/%.cma=$(OcamlDir)/%.cma)
+OutputCMXA := $(LibraryCMXA:$(ObjDir)/%.cmxa=$(OcamlDir)/%.cmxa)
+OutputsCMI := $(ObjectsCMI:$(ObjDir)/%.cmi=$(OcamlDir)/%.cmi)
+OutputsCMX := $(ObjectsCMX:$(ObjDir)/%.cmx=$(OcamlDir)/%.cmx)
+OutputLibs := $(UsedLibNames:%=$(OcamlDir)/%)