Wie erstelle ich ein Verzeichnis in einem Makefile, wenn mkdir -p nicht verfügbar ist?

8

Ich habe ein Makefile, das die übliche Verzeichniserstellung durchführt:

%Vor%

Leider, wenn ich dies unter scratchbox2 ausführen, schlägt der Befehl mkdir -p immer still.

Ich habe den folgenden Kludon versucht, der nicht funktioniert:

%Vor%

Dies gibt aus:

%Vor%

... der abschließende Schrägstrich verhindert, dass die dir-Funktion das letzte Verzeichnis auf die von mir gewünschte Weise entfernt.

Wenn Sie ein Skript oder eine kleine C-Anwendung zum Replizieren der Funktion "-p" schreiben, hat jemand irgendwelche Ideen, um die Unterverzeichnisse im Makefile zu erstellen?

Ohne die Option -p gibt mkdir einen Fehler aus, wenn das Makefile versucht, ein Verzeichnis zu erstellen, das bereits existiert. Ich kann mkdir blah 2 & gt; / dev / null, aber dann riskiere ich andere Fehlermeldungen zu verlieren.

Hat jemand irgendwelche Gedanken darüber, warum mkdir -p unter scratchbox2 nicht funktioniert?

BEARBEITEN

Gestützt auf Vorschläge von bobbogo habe ich das zusammengefügt. Es sieht ziemlich verworren aus, aber scheint zu funktionieren, sogar unter scratchbox2.

%Vor%     
Simon Elliott 04.03.2011, 11:58
quelle

3 Antworten

4

Sie können Ihre Gesamtstruktur von mkdir s durch folgende ersetzen:

%Vor%

Dadurch wird ein Shell-Befehl wie folgt erstellt:

%Vor%

Dies wird für jede Kompilierung ausgeführt. Nicht sehr elegant. Sie könnten dies optimieren, indem Sie eine Art Sentinel-Datei verwenden. Zum Beispiel:

%Vor%

.sentinel wird einmal vor allen Objekten erstellt und ist make -j befreundet. In der Tat sollten Sie dies auch dann tun, wenn mkdir -p für Sie arbeitet (in diesem Fall würden Sie mkdir -p anstatt der $(foreach) hack Lösung verwenden).

    
bobbogo 04.03.2011, 12:53
quelle
0

Sie können make anweisen, jeden Fehlerrückgabecode eines Befehls mit - :

zu ignorieren %Vor%

(Beachten Sie, dass das Problem mit dem nachfolgenden Schrägstrich nicht behandelt wird.)

    
Greg Hewgill 04.03.2011 12:02
quelle
-1

Es gibt einen einfacheren Weg. Sie können mkdir innerhalb einer Shell-Funktion wie folgt aufrufen:

%Vor%

Die Funktion shell in gnu make führt Befehle nach dem Wort shell als Shell-Befehl aus.

    
yoshi 07.12.2016 12:58
quelle

Tags und Links