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. 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.
    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
    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
  2. 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..
    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.