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

C Discussion :

Makefile séparateur manquant


Sujet :

C

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut Makefile séparateur manquant
    Bonjour,

    Voici mon Makefile qui a pour but de créer une bibliothèque lib.a dans un dossier dir0. Cette bibliothèque doit contenir les fichiers dir1.o et dir2.o. Les dossier dir1 et dir2 sont dans le dossier dir0. Mais j'ai un problème au niveau des boucles "for" que je n'ai jamais utilisé dans un Makefile donc j'ai du mal avec la syntaxe.
    make m'affiche : Makefile:7: *** séparateur manquant . Arrêt.

    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
     
    AR = ar
    ARFLAGS = -cr
    LIB = lib.a
    DIR = dir1 dir2
    OBJS= dir1/dir1.o dir2/dir2.o
     
    @for d in $(DIR); do make; done
     
    all : $(LIB) 
     
    $(LIB) : $(OBJS) Makefile
    	$(AR) $(ARFLAGS) $(LIB) $(OBJS)
     
    .PHONY: clean
    clean:
    	-rm -f lib.a
    	@for dir in $(DIR);do make clean;done

  2. #2
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Un makefile n'est pas un script shell, il n'y a pas d’exécution séquentiel, ligne à ligne de ton makefile.

    Si tu veux pouvoir exécuter une boucle for, alors il faut la mettre dans une règle. Ou alors sur une dépendance.

    Lilian.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    D'accord mais maintenant j'ai une boucle infinie.

    Comme ceci, tout fonctionne :
    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
    AR = ar
    ARFLAGS = -cr
    LIB = lib.a
    DIR = dir1 dir2
    OBJS= dir1/dir1.o dir2/dir2.o
     
    TEST= cd dir1;make;cd ../dir2;make;
     
    all : $(LIB) 
     
    $(LIB) : $(OBJS) Makefile
    	$(TEST)
    	$(AR) $(ARFLAGS) $(LIB) $(OBJS)
     
    .PHONY: clean
    clean:
    	-rm -f lib.a;
    	cd dir1; make clean; cd ../dir2; make clean;
    Mais cela ne fonctionne plus en mettant une boucle for :
    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
    AR = ar
    ARFLAGS = -cr
    LIB = lib.a
    DIR = dir1 dir2
    OBJS= dir1/dir1.o dir2/dir2.o
     
    TEST= for d in $(DIR); do cd HOME/Projet/src/d; make;done
     
    all : $(LIB) 
     
    $(LIB) : $(OBJS) Makefile
    	$(TEST)
    	$(AR) $(ARFLAGS) $(LIB) $(OBJS)
     
    .PHONY: clean
    clean:
    	-rm -f libbcb.a;
    	for d in $(DIR);do cd HOME/Projet/src/d; make clean;done

  4. #4
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Il y a tout un lot de manières de faire différentes pour faire ce que tu veux. Mais je ne crois pas que tu as pris la meilleur.

    Si je comprends bien, tu as 1 makefile par fichier objet ?
    Les sources de chacun des fichiers objet sont des dossiers séparés ?

    Pourquoi avoir choisit cette architecture ?

    Lilian.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    C'est exact et j'ai choisis cette architecture tout simplement car elle m'aie imposée. C'est un entrainement pour la manipulation des makefile.

    L'ensemble des fichiers utiles pour créer dir1.o sont dans dir1 et de même pour dir2

  6. #6
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Ok. C'est étrange quand même comme sujet, ça ne permet pas d'utiliser la puissance de make.


    Pour ta ligne 7, essais plutot ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEST=$(shell (for d in $(DIR); do cd HOME/Projet/src/$$d; make; cd - ; done))

    Lilian.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Pour info, au cas où...

    Si cette variable n'est pas nécessaire au cours de l'execution du make, il ne va même as essayer de la résoudre.

    Je te recommanderais bien de faire une règle OBJ1 pour la génération de dir1.o, OBJ2 pour dir2.o, et de mettre ces règles dans la iste de dépendance de all.

    Ensuite, à toi d'appeler ton make pour OBJ1 et 2.

    Lilian.

Discussions similaires

  1. Création des Makefiles (-I manquant ?)
    Par LittleWhite dans le forum Qt Creator
    Réponses: 1
    Dernier message: 10/09/2011, 11h15
  2. Séparateur manquant dans un makefile
    Par Moons7 dans le forum C
    Réponses: 2
    Dernier message: 09/05/2010, 11h51
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. séparateurs dans un fichier
    Par manuhard dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2002, 11h30
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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