Czy w Unixie mogę najpierw uruchomić polecenie „make” w katalogu bez wcześniejszego cd-do tego katalogu?


Odpowiedzi:


338

make -C /path/to/dir


8
Grump - to nie jest standardowe wykonanie; musi to być rozszerzenie GNU. Ponieważ mówisz, że Linux i Unix nie jest jasne, którego chcesz, ale opcja -C nie będzie działać w systemie Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) lub HP-UX 11.23 (/ usr / bin / make). Mimo to 1 na 4 nie jest taki zły.
Jonathan Leffler

6
Działa również w produkcji BSD, więc nie jest to tylko rozszerzenie GNU.
Chris Dodd

4
upewnij się, że „C” jest pisane wielkimi literami.
m.r226,

101

Jak zauważono w innych odpowiedziach, make (1) ma taką -C opcję; kilka poleceń ma podobne opcje (np. tar). Warto zauważyć, że w przypadku innych poleceń, które nie mają takich opcji, można użyć:

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

Uruchamia to polecenie w podpowłoce, która najpierw zmienia katalog roboczy (pozostawiając katalog roboczy powłoki nadrzędnej w spokoju). Tutaj && stosuje się zamiast ; łapać przypadki błędów, w których katalogu nie można zmienić.


22

Jeśli powodem, dla którego nie chcesz przenosić dysku CD do katalogu, jest konieczność pozostania w bieżącym katalogu w celu wykonania późniejszego zadania, możesz użyć poleceń pushd i popd:

pushd ProjectDir ; make ; popd

To idzie do ProjectDir, uruchamia make i wraca do miejsca, w którym byłeś.



-3

makefile:

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

run:
    ./build/test

lub

run:
    ./../build/test

itp.


1
Odpowiedź całkowicie pomijała pytanie - chodzi o to, jak wywołać make, a nie jak napisać makefile.
Petr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.