In Unix, posso eseguire 'make' in una directory senza prima registrarmi in quella directory?


210

In Unix, posso eseguire makein una directory senza prima cdaccedere a quella directory?

Risposte:


338

make -C /path/to/dir


8
Grump - che non è di marca standard; deve essere un'estensione GNU. Dato che dici Linux e Unix, non è chiaro quale vuoi, ma l'opzione -C non funzionerà su Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) o HP-UX 11.23 (/ usr / bin / make). Tuttavia, 1 su 4 non è poi così male.
Jonathan Leffler,

6
Funziona anche con BSD, quindi non è solo un'estensione GNU.
Chris Dodd,

4
assicurati che "C" sia in maiuscolo.
m.r226,

101

Come notato in altre risposte, make (1) ha -C un'opzione per questo; diversi comandi hanno opzioni simili (ad es. tar). È utile notare che per altri comandi privi di tali opzioni è possibile utilizzare:

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

Questo esegue il comando in una sotto-shell che per prima cosa ha cambiato la sua directory di lavoro (lasciando solo la directory di lavoro della shell madre). Qui && viene utilizzato invece di ; rilevare casi di errore in cui non è possibile modificare la directory.


22

Se il motivo per cui non si desidera eseguire il cd in una directory è perché è necessario rimanere nella directory corrente per un'attività successiva, è possibile utilizzare pushd e popd:

pushd ProjectDir ; make ; popd

Questo va in ProjectDir, esegue make e torna a dove eri.


11

Inoltre puoi usare:

make --directory /path/to/dir

-3

makefile:

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

run:
    ./build/test

o

run:
    ./../build/test

eccetera.


1
La risposta ha completamente mancato la domanda: si tratta di come invocare make, non come scrivere makefile.
Petr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.