• # pas main.o

    Posté par  (site Web personnel) . Évalué à 1.

    Le fichier main.o n'est pas un exécutable : il te faut générer un exécutable en "linkant" tous tes fichiers .o !
    Comme tu as un fichier makefile, exécute le avec la commande make qui va faire tout ce qu'il faut. ;-)

    • [^] # Re: pas main.o

      Posté par  . Évalué à 1.

      Bonsoir, merci de votre réponse :)

      J'ai pourtant deja tout fait dans le makefile, je vous le joint ci-dessous.

      Titre de l'image

      Y a t-il une erreur ? Merci d'avance :)

      • [^] # Re: pas main.o

        Posté par  . Évalué à 1.

        le make me retoure : makefile:4: * missing separator. Arret.

        :(

        • [^] # Re: pas main.o

          Posté par  (site Web personnel) . Évalué à 3.

          Ça veut dire qu'il manque une tabulation en début de ligne 4.

          Attention, la syntaxe de Make est « particulière » :

          nom-de-cible: dépendances
          <tabulation>action
          

          Si tu mets des espaces à la place de la tabulation, ça ne marche pas.

      • [^] # Re: pas main.o

        Posté par  . Évalué à 1.

        si le main depend des autres fichiers/programmes ton main.o devrait ressembler à cela

        main.o : utilitaire.o voiture.o course.o essaisLibres.o
           $(CC) -c main.c

        ensuite ton appel à make devrait etre
        make main.o

      • [^] # Re: pas main.o

        Posté par  . Évalué à 4.

        Ton makefile semble avoir quelques erreurs:

        1. Clairement, vu son inconsistence, l'indentation dans ton Makefile n'est pas bonne…

        2. La définition de ta variable CC est certes correcte mais ne suit pas vraiment les best practices en la matière: le -Wall -Werror -std=gnu99 doit être setté dans la variable CFLAGS.

        3. Pour la cible all tu as $(CC) -o main.o [...] ce qui va écraser ton fichier objet et le remplacer par le résultat du link… je ne suis pas sûr que c'est ce que tu souhaites vraiment. Ce qui se fait généralement c'est plutôt un -o main (pas d'extension pour les executables sous Linux…)

        4. En l'état, toutes tes target pour les fichiers en .o sont inutiles car déjà connues explicitement par ̀ make. Pire que ça, en forçant ces règles explicitement, tu supprimes des eventuels(CFLAGS) définis par l'environnement (ou que tu aurais potentiellement définis plus haut … plutôt que dans `(CC) ;-p)

        Outre ces erreurs, il y aurait quelques optimisations possibles grâce aux variables implictes de GNU Make.
        Par exemple, tu peux remplacer ton énumération de .o ligne 4 par un bête $^ (voir https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html)

        Bon courage !

  • # gcc donne a.out

    Posté par  . Évalué à 1. Dernière modification le 08/02/19 à 12:38.

    Tu essaies d'exécuter un fichier avec l'extension .o ce qui est impossible, vu que tu as plusieurs fichiers tu peux si tu n'arrives pas à faire de Makefile, créé un dossier où tu déplaceras tout les fichier .c à la racine puis tu fais un Gcc *.c ce qui générera un fichier a.out, pour exécuter tu fais ./a.aout

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.