web-dev-qa-db-fra.com

Affecter le statut de sortie standard à une variable de makefile

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.

1
Motumbo

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.

4
Gerhard Burger