Partage
  • Partager sur Facebook
  • Partager sur Twitter

lien des fichiers dans un makefile

Sujet résolu
    26 septembre 2021 à 18:16:19

    Bonjour,

    j'ai cette erreur qui me pose problème depuis trop longtemps : 

    et voici mon makefile :

    #=====================
    # Makefile du Cours 1
    #=====================
    
    #-------------
    # Executables 
    #-------------
    
    c1test1 : c1test1.o eltprim.o lstprim.o lstop.o
    	gcc -c c1test1.o eltprim.o lstprim.o lstop.o -o c1test1
    
    c1test1.o : c1test1.c
    	gcc -c c1test1.c -o c1test1.o 
    
    #----------
    # Modules
    #----------
    
    # TDA ELEMENT
    #
    
    # -- Primitives avec realisation par "car"
    #
    eltprim.o : eltcar.c eltcar.h
    	gcc -c eltcar.c -o eltprim.o
    
    eltprim.h : eltsdd.h
    	touch eltprim.h
    
    eltsdd.h : eltcar.h
    	touch eltsdd.h
    
    # -- Operations 
    #
    
    # TDA LISTE
    #
    
    # -- Primitives avec realisation par faux pointeurs : 
    #
    lstprim.o : lstcur.c lstprim.h
    	gcc -c lstcur.c -o lstprim.o
    
    lstsdd.h : lstcur.h
    	touch lstsdd.h
    
    
    lstprim.h : lstsdd.h 
    	touch lstprim.h
    
    # -- Operations 
    #
    
    lstop.o : c1lstop.c c1lstop.h 
    	gcc -c c1lstop.c -o lstop.o
    
    c1lstop.h : lstprim.h
    	touch c1lstop.h
    
    #----------------------------
    # Gestion generale du projet 
    #----------------------------
    
    all : c1test1
    
    clean :
    	rm *.o
    
    tags : 
    	etags *.c *.h

    et au cas où, voici mon arborescence :

    pour c1test1, si j'enlève le -c, j'obtiens cette erreur là : 

    je ne pense pas que ce soit nécessaire de mettre des flags dans mon makefile et je ne comprends pas pourquoi j'ai des erreurs de liens...

    merci d'avance pour votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2021 à 20:36:05

      Déjà, il ne faut pas l'option -c sur la ligne qui produit l'exécutable.

      Les fonctions mentionnée sont bien défini ?


      • Partager sur Facebook
      • Partager sur Twitter
        26 septembre 2021 à 20:47:18

        Bonjour,

        L'option -c de gcc indique une demande de compilation (on transforme un .c en .o) , pas d'édition des liens (on prends plusisuers .o et des bibliothèques pour créer un exécutable ou une bibliothèque).

        Le makefile est mal foutu, il faut utiliser les règles implicites ⇒

        #=====================
        # Makefile du Cours 1
        #=====================
         
        #-------------
        # Executables
        #-------------
         
        c1test1 : c1test1.o eltprim.o lstprim.o lstop.o
         
        c1test1.o : c1test1.c
         
        #----------
        # Modules
        #----------
         
        # TDA ELEMENT
        #
         
        # -- Primitives avec realisation par "car"
        #
        eltprim.o : eltcar.c eltcar.h eltsdd.h eltprim.h
        
         
        # -- Operations
        #
         
        # TDA LISTE
        #
         
        # -- Primitives avec realisation par faux pointeurs :
        #
        lstprim.o : lstcur.c lstprim.h  lstsdd.h lstcur.h
         
        # -- Operations
        #
         
        lstop.o : c1lstop.c c1lstop.h lstprim.h
         
         
        #----------------------------
        # Gestion generale du projet
        #----------------------------
        
        .PHONY: all clean tags
         
        all : c1test1
         
        clean :
            rm *.o
         
        tags :
            etags *.c *.h

        Il manque sans doute pas mal de header pour c1test1.o


        C'est le prof qui a fait ça  ?

        • Partager sur Facebook
        • Partager sur Twitter
          27 septembre 2021 à 0:03:15

          oui @zero.c, les fonctions sont définies dans c1lstop.c

          oui c'est le prof qui a fait ça, je dois juste juste écrire un .c et un .h, je ne suis pas censé toucher au makefile, appart pour ces 2 fichiers...

          • Partager sur Facebook
          • Partager sur Twitter
            27 septembre 2021 à 8:42:16

            Dis lui d'apprendre à écrire des Makefile alors 😉
            • Partager sur Facebook
            • Partager sur Twitter

            git is great because Linus did it, mercurial is better because he didn't.

              6 octobre 2021 à 17:53:18

              Et encore mieux, utiliser l'option -MMD pour que gcc genere automatiquement les dépendances pour chaque module objet.

              Comme ça il suffit de dire quels .o composent un exécutable, et hop, les lignes 11 à 39 sautent, remplacées par

              -include (wildcard *.d)

              Penser à définir CFLAGS avec des valeurs décentes -Wall -Wextra,  standard utilisé, optimisation ou début,...

              -
              Edité par michelbillaud 6 octobre 2021 à 17:57:01

              • Partager sur Facebook
              • Partager sur Twitter

              lien des fichiers dans un makefile

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown