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

Shell et commandes GNU Discussion :

for dans un make


Sujet :

Shell et commandes GNU

  1. #1
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut for dans un make
    Bonjour à tous,

    Dans un gnu make sur cygwin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cible.x: dep1.a dep2.b dep3.c
    	@echo "@" : $@
    	@echo "^" : $^
    	@echo "<" : $<
    	for fichier in "ls  *.c"
    	do
    	echo $fichier
    	done
     
    /bin/sh: -c: line 1: syntax error: unexpected end of file
    Merci

    JPD

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Et c'est quoi la question
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Je commence avec lbash et make.

    Pourquoi : "unexpected end of file"

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'une part une cible est définie par :: (: c'est pour une règle)

    d'autre part as-tu vérifié que tu as bien une ligne blanche à la fin du fichier ?

    Souvent ça peut provenir de ça..

  5. #5
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Voilà:
    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
     
    # <projet>/Makefile
    # Test des variables automatiques
    # *** missing separator.  Stop.   pas de tab
    # Une cible 'supplémentaire'  (ex  clean)doit être placée après la cible 'par défaut'. 
    cible.x: dep1.a dep2.b dep3.c
    	@echo "@" : $@
    	@echo "^" : $^
    	@echo "<" : $<
    	for fichier in "ls  *.c"
    	do
    	echo $fichier
    	done
     
    dep1.a :
    	@echo $@ > $@
     
    dep2.b :
    	@echo $@ > $@
     
    dep3.c :
    	@echo $@ > $@	 
     
    # Cible            : fictive (make clean)
    # Dependances      :
    # Actions          : effacement des fichiers produits dans /out
     
     
    clean:
    	del dep*.*
    ligne vide à la fin.

    JPD

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Dans un Makefile, une ligne correspond à une exécution.
    Du coup, là, il va essayer d'exécuter for et s'arrêter. Puis do et s'arrêter, etc.

    A ça, tu as donc deux solutions :

    1. tout écrire sur une seule ligne ;
    2. utiliser des \ pour échapper les sauts de lignes.

    Solution 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cible.x: dep1.a dep2.b dep3.c
        @echo "@" : $@
        @echo "^" : $^
        @echo "<" : $<
        for fichier in "ls  *.c"; do echo $fichier; done
    Solution 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cible.x: dep1.a dep2.b dep3.c
        @echo "@" : $@
        @echo "^" : $^
        @echo "<" : $<
        for fichier in "ls  *.c"; do\
            echo $fichier;\
        done
    Par contre, au passage, ça marche vraiment ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fichier in "ls *.c"
    Personnellement, j'aurais fait (pas le même type de quotes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fichier in `ls *.c`
    Et pour plus de sécurité, encadre tes variables avec des double quotes :
    Ca évite des des catastrophes quand il y a un espace ou un caractère spécial dans le nom de fichier.

  7. #7
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Voici un screen shot.
    Images attachées Images attachées  

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Ben ça n'affiche pas de message d'erreur.

  9. #9
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Non parce que c'est copier collé directement dans la fenêtre.

    Vois ce qui suis avec makefile.
    Images attachées Images attachées  

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Ca, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           for file in `find .|grep -i '\.c$$'`; do \
                    echo "$file"; \
            done

  11. #11
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Non. Peut-être que c'est parce que je suis sur windows.
    Ça, $$ , ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            done
    	for fichier in `ls *.c` ; do \
    	echo "$$fichier" ; \
    	done
    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
     
    $ make -f testmake
    @ : cible.x
    ^ : dep1.a dep2.b dep3.c
    < : dep1.a
    for file in `find .|grep -i '\.c$'`; do \
            echo "$file"; \
            done
    ./dep3.c
    ./stripFil.c
    ./strlcat.c
    ./strlcpy.c
    ./strsub.c
    for fichier in `ls *.c` ; do \
            echo "$fichier" ; \
            done
    dep3.c
    stripFil.c
    strlcat.c
    strlcpy.c
    strsub.c
    Ça fera au moins une de mes discussions de résolu.

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Au temps pour moi : oui, il faut doubler les $ !

    Avec un seul $, c'est considéré comme une variable du Makefile, tandis qu'avec deux, c'est une variable du script exécuté (je ne sais pas si je suis clair... mais les docs la-dessus ne sont souvent pas très claires non plus ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une boucle for dans un switch case?
    Par Death83 dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 15h05
  2. Problème "for" dans dictionnaire de liste
    Par Sayrus dans le forum Général Python
    Réponses: 3
    Dernier message: 15/02/2006, 17h35
  3. Boucle For dans un TDBGrid
    Par Latipolia dans le forum C++Builder
    Réponses: 28
    Dernier message: 14/06/2005, 13h12
  4. boucle for dans un if...
    Par SylverFox dans le forum Débuter
    Réponses: 3
    Dernier message: 11/08/2004, 17h57
  5. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07

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