123 Stimmen

wie verhindert man den "directory already exists error" in einem makefile, wenn man mkdir benutzt

Ich muss ein Verzeichnis in meinem Makefile erzeugen und möchte nicht immer wieder die Fehlermeldung "Verzeichnis existiert bereits" erhalten, obwohl ich sie leicht ignorieren kann.

Ich benutze hauptsächlich mingw/msys, würde aber gerne etwas haben, das auch mit anderen Shells/Systemen funktioniert.

Ich habe es versucht, aber es hat nicht funktioniert. Irgendwelche Ideen?

ifeq (,$(findstring $(OBJDIR),$(wildcard $(OBJDIR) )))
-mkdir $(OBJDIR)
endif

0voto

Mischa Punkte 2180

Das ist etwas einfacher als Lars' Antwort:

something_needs_directory_xxx : xxx/..

und generische Regel:

%/.. : ;@mkdir -p $(@D)

Keine Touch-Dateien zu bereinigen oder .PRECIOUS zu machen :-)

Wenn Sie einen weiteren kleinen generischen gmake-Trick sehen wollen, oder wenn Sie an nicht-rekursivem Make mit minimalem Gerüst interessiert sind, sollten Sie sich Zwei weitere billige gmake-Tricks und die anderen Beiträge in diesem Blog, die sich auf die Herstellung beziehen.

0voto

Andrew Punkte 2793

Wenn Sie den Rückgabewert explizit ignorieren und den Fehlerstrom ausgeben, wird Ihr Make den Fehler ignorieren, wenn er auftritt:

mkdir 2>/dev/null || true

Dies sollte bei einem parallelen Fabrikat keine Gefahr für ein Rennen darstellen - aber ich habe es nicht getestet, um sicher zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X