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

210

Czy w Unixie mogę uruchomić makew katalogu bez uprzedniego wejścia cddo tego katalogu?

użytkownik46795
źródło

Odpowiedzi:

338

make -C /path/to/dir

bmotmans
źródło
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ć.

Dave C.
źródło
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ś.

EnigmaCurry
źródło
11

Możesz również użyć:

make --directory /path/to/dir
korst1k
źródło
-3

makefile:

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

run:
    ./build/test

lub

run:
    ./../build/test

itp.

oldpilsbury
źródło
1
Odpowiedź całkowicie pomijała pytanie - chodzi o to, jak wywołać make, a nie jak napisać makefile.
Petr