IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Syntaxe dans makefile


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Syntaxe dans makefile
    Bonjour,

    J'ai une ligne commme ça dans un fichier makefile et je ne comprends pas la syntaxe. Est-ce que quelcun saurait ce que ça signifie (notamment les %)?

    A="$${B%/}" ;\

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Donne les lignes qui vont autour. Ce n'est peut-être pas du make, c'est peut-être simplement un morceau de shell dans ton makefile.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    test_test1:
    	@C="$(ABC)" ; \
    	for B in $$C; do \
    		FOLDER="$${B%/}" ;\
    		test "$${B%%*/}" || continue ;\
    		[ -f $$FOLDER/makefile ] || continue ;\
    		(cd $$FOLDER && make all) || exit;\
    	done
    Voilà la target entière. J'ai bien compris ce que ça fait mais j'ai juste un doute sur les %/.

    Merci

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Donc c'est bien du shell.

    ${B%/} est la valeur de B, moins le slash à la fin. C'est du shell. D'une manière générale, en shell, ${var%pattern} est la valeur de var, moins la plus courte sous-chaine à la fin de var qui match pattern.

    Le $ est doublé parce que l'expression passe d'abord à traver make, qui remplace $$ par un $.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup, c'est effectivement ça. L'expression "$${B%%*/}" signifie-t-elle qu'il faut enlever un nombre quelconque de / à la fin du mot?

    Merci encore

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Non, elle supprime tout si $B se termine par un slash. En fait la ligne sert à passer à l'élément suivant si $B ne se termine pas par un slash.

    Ces syntaxes sont expliquée dans man bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
           ${parameter%word}
           ${parameter%%word}
                  The word is expanded to produce a pattern just  as  in  pathname
                  expansion.   If  the  pattern  matches a trailing portion of the
                  expanded value of parameter, then the result of the expansion is
                  the  expanded value of parameter with the shortest matching pat-
                  tern (the ‘‘%’’ case)  or  the  longest  matching  pattern  (the
                  ‘‘%%’’  case)  deleted.   If  parameter  is  @ or *, the pattern
                  removal operation is applied to  each  positional  parameter  in
                  turn,  and the expansion is the resultant list.  If parameter is
                  an array variable subscripted with @ or *, the  pattern  removal
                  operation  is  applied  to each member of the array in turn, and
                  the expansion is the resultant list.
     
           ${parameter/pattern/string}
                  The pattern is expanded to produce a pattern just as in pathname
                  expansion.   Parameter is expanded and the longest match of pat-
                  tern against its value is replaced  with  string.   If  Ipattern
                  begins  with /, all matches of pattern are replaced with string.
                  Normally only the first match is replaced.   If  pattern  begins
                  with  #, it must match at the beginning of the expanded value of
                  parameter.  If pattern begins with %, it must match at  the  end
                  of  the expanded value of parameter.  If string is null, matches
                  of pattern are deleted and the / following pattern may be  omit-
                  ted.   If  parameter  is  @  or *, the substitution operation is
                  applied to each positional parameter in turn, and the  expansion
                  is  the  resultant list.  If parameter is an array variable sub-
                  scripted with @ or *, the substitution operation is  applied  to
                  each  member  of  the  array  in  turn, and the expansion is the
                  resultant list.

Discussions similaires

  1. Syntaxe dans makefile
    Par julian_ross dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 20/12/2008, 16h43
  2. Syntaxe dans un script shell
    Par cubepiege dans le forum Linux
    Réponses: 5
    Dernier message: 27/09/2005, 16h21
  3. Erreur de syntaxe dans une requete
    Par linou dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/08/2005, 12h44
  4. [JSP]Erreur de syntaxe dans un tag <option select
    Par logica dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 03/05/2005, 14h33
  5. erreur syntaxe dans requete
    Par dom - ien moutiers dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2004, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo