Salut Vincent :-)

et merci pour ces explications... en fait la ligne tabstop=4 était bien présente dans mon virmc mais il y avait une autre ligne qui le faisait insérer des espaces au lieu d'une tabulation... bref, c'est résolu... à part ce problème de variables. Quand tu dis qu'il faut écrire $$i celà faut pour les variables Bash seulement ou aussi pour celles définies dans mon Makefile ? Comme $(CC) ou $(CFLAGS) ? Bon, d'autre part, je viens de me rendre compte que ce que je faisais était pas très clean, utiliser comme nom CC et CFLAGS pour des variables qui désigne en fait un compilateur et des options pour C++... quelqu'un connait le nom correct à utiliser pour ce langage ? J'ai lu quelque part quelque chose du genre CXXFLAGS mais je ne suis pas tout à fait sûr :)

Le 03/09/2010 15:07, Vincent BRACH a écrit :
Salut Léo et bonjour à tous,
justement je me demandais si Make accordait une réelle importance à l'indentation. J'ai configuré mon Vim pour insérer 4 espaces au lieu d'une tab (plus standard), mais peut être que j'ai mal fait... si quelqu'un a plus de précisions sur le sujet :)
Tout à fait : l'outil make accorde la plus grande importance à l'écriture du Makefile au niveau de ce que tu appelles l'indentation : je dirais plus au niveau "rubrique". - Si une ligne ne commence pas par une tabulation il s'agit de déclaration de variables (ou constantes) et/ou d'une cible dans le Makefile. - Si une ligne commence par une tabulation (attention j'ai bien dit une tabulation et pas plusieurs espaces) il s'agit d'une ligne d'exécution d'une commande (en générale dans une cible).

Petit test entre geek :) :
gvim (trés bon éditeur, n'en déplaise a certains "puristes") sait d'ailleurs très bien faire la différence : faites le test : écrire un Makefile dans gvim avec une cible (.o:.c par exemple) et à la ligne suivante écrivez votre ligne de commande (par exemple un "@cat /etc/issue") essayer en mettant en début de ligne des espaces puis essayer avec une seule tabulation : gvim effectue une coloration syntaxique différente ! le Makefile avec des espace en début d'une ligne de commande ne fonctionnera pas.

En règle général une cible d'un Makefile s'écrit :

cible: dépendances
[TAB]Ligne de commande

Un très bon tutoriel (en français en plus) que je conseil vivement : http://gl.developpez.com/tutoriel/outil/makefile/Makefile.pdf

Attention également au variable dans un Makefile : en général $(variable).
Si on écrit en shell par exemple un :
  for i in `find /tmp | grep txt` ; do echo $i ; done
on écrira dans un Makefile cette commande de la manière suivante :
  for i in `find /tmp | grep txt` ; do echo $$i ; done

Je suis amené régulièrement à écrire des Makefile parfois assez complexes et me fait souvent piégé avec ce genre d'écriture...

Si vous le souhaitais je serais prêt à organiser un Atelier Makefile pour Linux-Azur (peut-être courant octobre) : avis aux amateurs ( ?? )

A+ et à vous lire,

Vincent





Diffusez cette liste aupres de vos relations :-)
   Linux Azur : http://www.linux-azur.org
   Vous etes responsable de vos propos.
*** Merci de rediger sans SMS, ni HTML ni PJ ***





Diffusez cette liste aupres de vos relations :-)
   Linux Azur : http://www.linux-azur.org
   Vous etes responsable de vos propos.
*** Merci de rediger sans SMS, ni HTML ni PJ ***



Répondre à