Il exécute en fait la commande, changeant le répertoire en some_directory
, cependant, cela est effectué dans un shell de sous-processus, et n'affecte ni la marque ni le shell à partir duquel vous travaillez.
Si vous cherchez à effectuer plus de tâches à l'intérieur some_directory
, vous devez ajouter un point-virgule et ajouter également les autres commandes. Notez que vous ne pouvez pas utiliser de sauts de ligne car ils sont interprétés par make comme la fin de la règle, donc tout saut de ligne que vous utilisez pour plus de clarté doit être échappé par une barre oblique inverse.
Par exemple:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Notez également que le point-virgule est nécessaire entre chaque commande même si vous ajoutez une barre oblique inverse et une nouvelle ligne. Cela est dû au fait que la chaîne entière est analysée en une seule ligne par le shell. Comme indiqué dans les commentaires, vous devez utiliser '&&' pour joindre les commandes, ce qui signifie qu'elles ne sont exécutées que si la commande précédente a réussi.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Ceci est particulièrement crucial lorsque vous effectuez des travaux destructeurs, tels que le nettoyage, car vous détruiriez autrement les mauvaises choses, en cas d' cd
échec pour une raison quelconque.
Une utilisation courante consiste cependant à appeler make dans le sous-répertoire, que vous voudrez peut-être examiner. Il y a une option en ligne de commande pour que vous n'ayez pas à cd
vous appeler , donc votre règle ressemblerait à ceci
all:
$(MAKE) -C some_dir all
qui se transformera en some_dir
et exécutera le Makefile
dedans avec la cible "all". En tant que meilleure pratique, utilisez $(MAKE)
plutôt que d'appeler make
directement, car cela prendra soin d'appeler la bonne instance de création (si vous, par exemple, utilisez une version spéciale de création pour votre environnement de génération), ainsi qu'un comportement légèrement différent lors de l'exécution. en utilisant certains commutateurs, tels que -t
.
Pour mémoire, faites toujours en écho la commande qu'elle exécute (sauf si elle est explicitement supprimée), même si elle n'a pas de sortie, ce que vous voyez.
make
, je n'ai jamais voulu changer le répertoire comme ça. Vous devriez peut-être essayer une autre approche de votre solution?