Kann ich unter Unix 'make' in einem Verzeichnis ausführen, ohne vorher in dieses Verzeichnis zu wechseln?


209

Kann ich unter Unix makein einem Verzeichnis ausgeführt werden, ohne cdvorher in dieses Verzeichnis zu wechseln?

Antworten:


338

make -C /path/to/dir


8
Grump - das ist nicht in der Standardmarke; Es muss eine GNU-Erweiterung sein. Da Sie Linux und Unix sagen, ist nicht klar, welche Sie möchten, aber die Option -C funktioniert nicht unter Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) oder HP-UX 11.23 (/ usr / bin / make). Trotzdem ist 1 von 4 nicht schlecht.
Jonathan Leffler

6
Es funktioniert auch in BSD make, es ist also nicht nur eine GNU-Erweiterung.
Chris Dodd

4
Stellen Sie sicher, dass 'C' in Großbuchstaben angegeben ist.
m.r226

100

Wie in anderen Antworten erwähnt, hat make (1) eine -C Option dafür; Einige Befehle haben ähnliche Optionen (z. B. tar). Es ist nützlich zu beachten, dass für andere Befehle, denen solche Optionen fehlen, Folgendes verwendet werden kann:

(cd /dir/path && command-to-run)

Dadurch wird der Befehl in einer Unter-Shell ausgeführt, deren Arbeitsverzeichnis zuerst geändert wurde (während das Arbeitsverzeichnis der übergeordneten Shell in Ruhe gelassen wird). Hier && wird anstelle von ; Fehlerfällen abgefangen, bei denen das Verzeichnis nicht geändert werden kann.


22

Wenn Sie nicht in ein Verzeichnis cd möchten, weil Sie für eine spätere Aufgabe im aktuellen Verzeichnis bleiben müssen, können Sie pushd und popd verwenden:

pushd ProjectDir ; make ; popd

Das geht in das ProjectDir, führt make aus und kehrt dorthin zurück, wo Sie waren.


11

Sie können auch verwenden:

make --directory /path/to/dir

-3

Makefile:

all:
    gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test

run:
    ./build/test

oder

run:
    ./../build/test

etc.


1
Die Antwort hat die Frage völlig verfehlt - es geht darum, wie man make aufruft, nicht wie man makefile schreibt.
Petr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.