Sous Unix, est-ce que je peux lancer 'make' dans un répertoire sans cd'ing d'abord dans ce répertoire?


210

Sous Unix, puis-je exécuter makedans un répertoire sans y cdaccéder au préalable?

Réponses:


338

make -C /path/to/dir


8
Grump - qui n'est pas de marque standard; ce doit être une extension GNU. Puisque vous dites Linux et Unix, vous ne savez pas exactement ce que vous voulez, mais l'option -C ne fonctionnera pas sur Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) ou HP-UX 11.23 (/ usr / bin / make). Pourtant, 1 sur 4 n'est pas trop mal.
Jonathan Leffler

6
Il fonctionne également dans BSD, donc ce n'est pas seulement une extension GNU.
Chris Dodd

4
assurez-vous que «C» est en majuscules.
m.r226

101

Comme indiqué dans d'autres réponses, make (1) a une -C option pour cela; plusieurs commandes ont des options similaires (par exemple tar). Il est utile de noter que pour d'autres commandes qui manquent de telles options, les éléments suivants peuvent être utilisés:

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

Cela exécute la commande dans un sous-shell dont le répertoire de travail a d'abord été modifié (tout en laissant le répertoire de travail du shell parent seul). Ici && est utilisé au lieu de ; pour détecter les cas d'erreur où le répertoire ne peut pas être modifié.


22

Si la raison pour laquelle vous ne voulez pas cd dans un répertoire est parce que vous devez rester dans le répertoire en cours pour une tâche ultérieure, vous pouvez utiliser pushd et popd:

pushd ProjectDir ; make ; popd

Cela va dans le ProjectDir, exécute make et revient là où vous étiez.


11

Vous pouvez également utiliser:

make --directory /path/to/dir

-3

makefile:

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

run:
    ./build/test

ou

run:
    ./../build/test

etc.


1
La réponse a complètement manqué la question - il s'agit de savoir comment appeler make, pas comment écrire makefile.
Petr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.