In realtà sta eseguendo il comando, cambiando la directory in some_directory
, tuttavia, questo viene eseguito in una shell di processo secondario e non influenza né make né la shell da cui stai lavorando.
Se stai cercando di eseguire più attività all'interno some_directory
, devi aggiungere un punto e virgola e aggiungere anche gli altri comandi. Si noti che non è possibile utilizzare le nuove righe poiché vengono interpretate da make come la fine della regola, quindi qualsiasi nuova riga utilizzata per chiarezza deve essere salvata da una barra rovesciata.
Per esempio:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Si noti inoltre che il punto e virgola è necessario tra ogni comando anche se si aggiunge una barra rovesciata e una nuova riga. Ciò è dovuto al fatto che l'intera stringa viene analizzata come una singola riga dalla shell. Come notato nei commenti, dovresti usare '&&' per unire i comandi, il che significa che vengono eseguiti solo se il comando precedente ha avuto successo.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Ciò è particolarmente cruciale quando si fa un lavoro distruttivo, come la pulizia, poiché altrimenti si distruggono le cose sbagliate, in caso di cd
fallimento per qualsiasi motivo.
Un uso comune però è chiamare make nella sottodirectory, che potresti voler esaminare. C'è un'opzione da riga di comando per questo, quindi non devi chiamarti cd
, quindi la tua regola sarebbe simile a questa
all:
$(MAKE) -C some_dir all
che si trasformerà in some_dir
ed eseguirà il Makefile
lì dentro con il target "all". Come best practice, usa $(MAKE)
invece di chiamare make
direttamente, poiché ti prenderà cura di chiamare la giusta istanza di make (se, ad esempio, usi una versione di make speciale per il tuo ambiente di build), oltre a fornire un comportamento leggermente diverso durante l'esecuzione utilizzando determinati interruttori, come ad esempio -t
.
Per la cronaca, fai sempre eco al comando che esegue (a meno che non sia esplicitamente soppresso), anche se non ha output, che è quello che stai vedendo.
make
, non ho mai voluto cambiare la directory in questo modo. Forse dovresti provare un altro approccio alla tua soluzione?