J'essaie de sauvegarder le statut de sortie standard d'une commande dans une variable de mon fichier makefile, mais je ne sais pas comment le faire.
J'ai essayé ceci:
pruebas:
@A= $(ls)
... mais ça ne marche pas.
Vous pouvez exécuter une commande dans le shell à partir du Makefile en utilisant la syntaxe $(Shell command)
. Si, par exemple, vous souhaitez quitter le statut de la commande ls
dans bash, vous devez taper:
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Cela pourrait nécessiter des explications: la partie > /dev/null 2>&1
redirige à la fois la sortie standard et l'erreur standard vers/dev/null afin que vous ne voyiez aucune sortie, puis "echo $? affiche le statut de sortie de la dernière commande. Vous pouvez essayer ceci en ligne de commande pour voir si cela fonctionne pour vous, par exemple
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
devrait vous donner
2
puisque c’est l’erreur ls
qui renvoie un argument inconnu (voir la page de manuel ls
).
Maintenant, comment inclure cela dans votre Makefile? Ajoutez simplement la ligne
A=$(Shell ls > /dev/null 2>&1 ; echo $$?)
à votre Makefile. Notez le supplément $
dans $$?
, il indique à make
que $?
n'est pas une variable du Makefile.
Ça devrait être ça! Ici vous pouvez voir le Makefile que j'ai utilisé pour tester ce comportement:
#Shell := /bin/bash
A=$(Shell ls > /dev/null 2>&1 ; echo $$? )
test:
@echo $A
.PHONY: test
Notes: make
choisit le /bin/sh
Shell par défaut, mais vous pouvez le remplacer en définissant
Shell := /bin/bash
Cela peut être utile pour les commandes plus complexes qui ne s'exécutent pas dans /bin/sh
.