Make: *** [src/fonction.o] Error 1

Bonjour,

Je souhaite créer un fichier objet à partir d'un fichier .c en utilisant un makefile contenant le code suivant:


src/fonction.o : src/fonction.c
gcc -c src/fonction.c -I include


(il y a effectivement bien une tabulation avant le gcc mais elle ne s'affiche pas sur le forum)

mais lorsque j'exécute "make src/fonction.o", j'obtient ceci:


src/fonction.c:2:19: fatal error: types.h: No such file or directory
compilation terminated.
<builtin>: recipe for target 'src/fonction.o' failed
make: *** [src/fonction.o] Error 1


Je précise que mon dossier include contient bien mon fichier.h et que lorsque j'execute "gcc -c src/fonction.c -I include" directement dans le compilateur, tout marche parfaitement.

Merci de votre aide par avance!!

Configuration: Macintosh / Chrome 78.0.3904.97

3 réponses

  1. C'est pourtant clair, tu as écris ton makefile, de façon à se qu'il aille chercher un dossier ou un fichier.. or selon le code retour, types.h n'existe pas. Je t'invite à partager ton code entier (makefile) s'il y a, mais aussi l'arborescence COMPLETE de ton projet.
    Merci.
    0
    1. Ce qui m'étonne le plus après reflexion c'est de voir que ton fichier .o que tu cherches à crée n'a aucune dépendance de header (.h) .. essaye de rajouter les .h après ta premiere ligne regroupant cible et dependance..
      0
      1. Voici mon makefile (j'ai ajouté des dépendances .h)

        src/fonction.o : src/fonction.c
        gcc -c src/fonction.c -I include

        src/fonction.c : include/types.h


        voici mon fichier types .h:

        #ifndef TYPES
        #define TYPES

        struct point3D{
        double x;
        double y;
        double z;
        };

        struct point2D{
        double x;
        double y;
        };

        #endif


        et voici mon fichier fonction.c:


        #include <stdio.h>
        #include "types.h"

        struct point3D Lorentz( struct point3D u, double sigma,double rho,double beta, double dt)
        {
        // determine la vitesse a l'instant t
        struct point3D v;
        v.x=sigma*(u.y-u.x);
        v.y=u.x*(rho-u.z)-u.y;
        v.z=u.x*u.y-(beta*u.z);

        // Actuallise la position du point
        u.x=u.x+v.x*dt;
        u.y=u.y+v.y*dt;
        u.z=u.z+v.z*dt;
        return(u);

        }

        struct point2D Lotka_Volterra( struct point2D u, double alpha, double beta,double delta, double gamma, double dt )
        {
        // dterminae la vitesse
        struct point2D v;
        v.x=(alpha*u.x)-(beta*u.y);
        v.y=(delta*u.x)-(gamma*u.y);

        // Actuallise la position du point
        u.x=u.x+v.x*dt;
        u.y=u.y+v.y*dt;
        return(u);
        }

        double Bifurcation_fourche( double u,double mu, double alpha, double dt)
        {
        // dterminae la vitesse
        double v;
        v=mu*u+alpha*(u*u*u);

        // Actuallise la position du point
        u=u+v*dt;
        return(u);
        }



        Le projet est structuré comme suit:

        projet/makefile.mk
        projet/include/types.h
        projet/src/fonction.c


        sachant que je cherche à creer fonction.o dans le fichier src.
        0
        1. A première vue :
          gcc -c src/fonction.c -I include

          1) Mettre un caractère tabulation en début de ligne (il y est peut-être, avec un affichage non conforme)
          2) Forcer la destination
          gcc -c -o src/fonction.o src/fonction.c  -I include
          0
        2. Merci pour votre réponse
          Il y avait bien une tabulation, c'était effectivement juste un problème d'affichage. Par contre j'ai essayé la commande suggérée mais mon problème reste le même
          Est-il possible que je fasse une erreur lorsque j'utilise le makefile avec le terminal? J'utilise la commande
          make src/fonction.o
          0