Dies ist eine Folgefrage zu meiner früheren Frage: SO 4403861 weil die vorgeschlagenen Lösungen die Abhängigkeiten zerstörten und das Makefile unbrauchbar machten. Ich kann nicht herausfinden, warum.
Ich verwende gnu make 3.82 Ich habe eine Regel, die funktioniert, wenn das obj-Verzeichnis erstellt worden ist:
objdir:=../obj
$(objdir)/%.o: %.C
$(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<
Wenn das obj-Verzeichnis jedoch nicht vorhanden ist, schlägt make fehl. Ich wollte, dass make bei Bedarf automatisch ../obj erstellt, also fügte ich etwas hinzu, was ich für sehr einfach hielt:
$(objdir)/%.o: %.C $(objdir)
$(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<
$(objdir):
if [ ! -d $(objdir) ] ; then mkdir $(objdir) ; fi
Wenn ich dies tue, erzwingt make jedes Mal die Kompilierung. Warum eigentlich? Das mkdir sollte nicht passieren, wenn es kein Verzeichnis gibt? Warum werden durch diese einfache Änderung Abhängigkeiten zerstört?