Re: récupérer le résultat d'une commande dans un Makefile

Page principale

Répondre à ce message
Auteur: Christophe LYON
Date:  
À: Laurent CHARLES
CC: ML Guilde
Sujet: Re: récupérer le résultat d'une commande dans un Makefile
Laurent CHARLES wrote:
> Le 07/10/05, Christophe LYON<christophe.lyon@???> a écrit :
>
>>?!!? ha bon? ou cela est-il explique? Je n'ai rien vu qui dise que dans
>>ce cas il faut finir d'analyser par le shell...
>
>
> Ah ben ça alors...?
> (Tu fais germer la graine du doute dans mon pauvre esprit...)
>
> C'est le principe de make.
> Il prend chaque ligne d'action séparément, réduit/resoud ses variables
> et fonctions, puis passe la ligne ainsi traitée au shell (en fait à
> $(SHELL)).
> Si je me souviens bien, tout est expliqué dans... les sources de make...
>


J'ai compris mon erreur :-)
J'avais compris que lorsque tu ecris
VAR=$$(macommande), VAR prenait comme valeur le resultat de la commande,
et c'est ca que je ne trouvais pas dans la doc. En fait, il n'en est
rien, VAR prend comme valeur $(macommande), qui sera evalue par le shell
si VAR est utilisee dans une commande.

D'autre part, les "" sont tres importantes dans l'exemple donne par Patrice.

Illustration:
VAR1=`cat hello.c`
VAR2=$(shell cat hello.c)
VAR3=$$(cat hello.c)
toto:
         echo $(VAR1)
         echo $(VAR2)
         echo $(VAR3)


make toto donne:
echo `cat hello.c`
#include <stdio.h> int main() { printf("hello\n"); return 0; }
echo #include <stdio.h>  int main() {   printf("hello\n");      return 0;  }


echo $(cat hello.c)
#include <stdio.h> int main() { printf("hello\n"); return 0; }

On voit donc que:
- pour VAR1, il manque les newline,
- pour VAR2, le # est interprete comme un commentaire par le shell, donc
echo ne sort rien
- pour VAR3, le resultat est le meme que pour VAR1

maintenant, je rajoute des "" autour de $(VARx) dans les commandes echo:
et make toto me donne:

echo "`cat hello.c`"
#include <stdio.h>

int main()
{
         printf("hello\n");
         return 0;


}
echo "#include <stdio.h>  int main() {  printf("hello\n");      return 
0;  }"
#include <stdio.h>  int main() {        printf(hellon);         return 0;  }
echo "$(cat hello.c)"
#include <stdio.h>


int main()
{
         printf("hello\n");
         return 0;


}

On voit donc que:
- pour VAR1, on a ce qu'on voulait,
- pour VAR2, c'est mieux, on a ce qu'on obtenait le coup d'avant avec
VAR1 et VAR3 :-)
- pour VAR3, on a tjs la meme chose que pour VAR1

En resume, pour Patrice, tu peux utiliser
VAR=`macommande` a condition de mettre des "" dans la commande qui va
utiliser $(VAR)


Christophe.