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 et programmation modulaire


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut Makefile et programmation modulaire
    Bonjour,

    J'ai un projet de programmation et je dois développer un pacman. Le nombre de lignes devient assez important et j'essaye de séparer mon code pour mieux m'y retrouver. Je vais vous l'attacher en pièce jointe pour que vous puissiez voir., mais avant je vais vous expliquer les dépendances entre les différents fichiers:
    -main.c, c'est le menu, il fait appel à la fonction nouvellePartie de jeu.c
    -jeu.c, c'est le jeu à proprement parler, il fait appel à chargement.h et gestion_fantomes.h
    -chargement.c, c'est le fichier qui initialise la carte et qui charge les différents sprites
    -gestion_fantome.c, c'est dans ce fichier que se gère les mouvements des fantômes
    -constantes.h, il contient les constantes dont j'ai besoin dans jeu.c, chargement.C et gestion_fantomes.c

    Pour le moment à la compilation, il m'affiche:
    gcc -Wall -g3 -c main.c -o obj/main.o
    gcc -Wall -g3 -c jeu.c -o obj/jeu.o
    gcc -Wall -g3 -c chargement.c -o obj/chargement.o
    gcc -Wall -g3 -c gestion_fantomes.c -o obj/gestion_fantomes.o
    gcc -Wall -g3 -o pacman obj/main.o obj/jeu.o obj/chargement.o obj/gestion_fantomes.o -lSDL_image -lSDL_ttf -lSDL -lSDLmain
    obj/jeu.o: In function `deplacerJoueur':
    /home/vanpie/Pacman/jeu.c:12: multiple definition of `pacman'
    obj/main.o:/home/vanpie/Pacman/main.c:16: first defined here
    obj/jeu.o: In function `deplacerJoueur':
    /home/vanpie/Pacman/jeu.c:15: multiple definition of `fantome'
    obj/main.o:/home/vanpie/Pacman/main.c:21: first defined here
    obj/jeu.o: In function `deplacerJoueur':
    /home/vanpie/Pacman/jeu.c:20: multiple definition of `mur'
    obj/main.o:/home/vanpie/Pacman/main.c:41: first defined here
    obj/jeu.o: In function `deplacerJoueur':
    ...
    ...
    Pourtant dans main.c, je n'utilise pas pacman, fantome, mur,...

    Pourriez-vous regarder mon makefile et les différentes dépendants?

    Un grand merci d'avance
    Fichiers attachés Fichiers attachés
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,

    Tu es sous quel OS ?

    Merci .

  3. #3
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Je suis sur Ubuntu.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  4. #4
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,

    Le probleme que tu as est au niveau du linkage , dommage je suis pas sous linux , mais sous windows , j'ai le meme probleme avec Code::Blocks .

    Merci .

  5. #5
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Merci d'avoir regardé

    Mais aurais-tu une idée sur l'origine du problème? Makefile, fichiers C ou fichiers H. Le problème vient peut-être des #include. J'avoue que j'ai essayé tout ce qui me paraissait logique au point de m'y perdre.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par v4np13
    Bonjour,

    J'ai un projet de programmation et je dois développer un pacman. Le nombre de lignes devient assez important et j'essaye de séparer mon code pour mieux m'y retrouver.
    Ci-joint. Ton projet légèrement réorganisé.

    Makefile :

    Ajoute le chemin d'include "-I." le module "data.c" et les dépendances "include/data.h" nécessaires, et tout devrait rentrer dans l'ordre.
    Fichiers attachés Fichiers attachés
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Merci pour ton aide, mais je ne comprends pas ce que tu veux dire avec:

    Citation Envoyé par Emmanuel Delahaye
    Makefile :
    Ajoute le chemin d'include "-I." le module "data.c" et les dépendances "include/data.h" nécessaires, et tout devrait rentrer dans l'ordre.
    P.S: J'avais tout fait avec Emacs, je sais bien, c'est vieillot mais je n'arrive pas à me forcer avec Code::Block
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par v4np13
    Merci pour ton aide, mais je ne comprends pas ce que tu veux dire avec:
    Tu programmes sous Linux et tu ne sais pas utiliser make ?

    http://emmanuel-delahaye.developpez.com/make.htm
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Bah si, mais c'est le "-l." qui m'a "choqué".

    Je pense que c'est bon. Merci
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par v4np13
    Bah si, mais c'est le "-l." qui m'a "choqué".
    C'est I majuscule, pas l minuscule... C'est peut être "-I./", je ne connais pas les détails sous Linux...
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    ,

    Tu as fait une grossière erreur dans ton code , j'ai failli moi même m'avoir :

    SDL_Surface * pacman[5] = {NULL}; // 5 surfaces pour chacune des directions du pacman + Mort
    SDL_Surface * fantome[6][4] = {{NULL},{NULL}}; // 5 fantomes (+zombi +mort) dans 4 directions
    SDL_Surface * mur = NULL, * pastille = NULL, * special = NULL, * pacmanActuel = NULL;

    struct fantome{
    int num; //numéro du fantôme
    int status; //status du fantome gauche, droite,... zombi ou mort
    SDL_Surface * actuel; //sprite actuel du fantôme
    int direction; //direction
    int ancDirection; //mémorise l'ancienne direction
    SDL_Rect position; //position du fantôme
    SDL_Rect ancPosition; //mémoire de l'ancienne position pour éviter les aller-retours
    };
    Idem pour les autres variables , c'est pour cela que le linkeur se trouve dans une situation d'ambiguïté .
    En plus ,pourquoi utiliser des variables globales comme pointeur ( c'est vraiment inutile en SDL ) , seulement du travail en plus !

    Merci et bonne chance pour la suite .

  12. #12
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Il y avait deux choses différentes la dedans:

    -Les sprites:
    SDL_Surface * pacman[5] = {NULL}; // 5 surfaces pour chacune des directions du pacman + Mort
    SDL_Surface * fantome[6][4] = {{NULL},{NULL}}; // 5 fantomes (+zombi +mort) dans 4 directions
    SDL_Surface * mur = NULL, * pastille = NULL, * special = NULL, * pacmanActuel = NULL;

    -Les informations relatives aux fantômes:
    struct fantome{
    int num; //numéro du fantôme
    int status; //status du fantome gauche, droite,... zombi ou mort
    SDL_Surface * actuel; //sprite actuel du fantôme
    int direction; //direction
    int ancDirection; //mémorise l'ancienne direction
    SDL_Rect position; //position du fantôme
    SDL_Rect ancPosition; //mémoire de l'ancienne position pour éviter les aller-retours
    };

    Mais ça a été réorganisé depuis

    Emmanuel, Il resterait un problème:
    /home/vanpie/Desktop/pacman/jeu.c:214: undefined reference to `G_special'
    /home/vanpie/Desktop/pacman/jeu.c:214: undefined reference to `G_pastille'
    /home/vanpie/Desktop/pacman/jeu.c:214: undefined reference to `G_mur'
    /home/vanpie/Desktop/pacman/jeu.c:214: undefined reference to `G_fantome'
    /home/vanpie/Desktop/pacman/jeu.c:214: undefined reference to `G_pacman'
    /home/vanpie/Desktop/pacman/jeu.c:217: undefined reference to `G_pacman'
    ...
    Les sprites sont déclarés dans data.c "et" dans data.h, pourtant dans jeu.c, il y a une #include "data.h" et dans le makefile, j'ai rajouté ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(OBJ_DIR)/data.o: data.c $(H_DIR)/data.h 
    	$(CC) $(CFLAGS) -c $< -o $@
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  13. #13
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,

    Le jeu fonctionne maintenant parfaitement sous windows !!
    Plus de probleme de linkage , c'est basé sur la version de -ed- ,
    fait attention pour le exit(0) sous Linux .

    Merci .
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip pac.zip (466,1 Ko, 36 affichages)

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par v4np13
    Les sprites sont déclarés dans data.c "et" dans data.h, pourtant dans jeu.c, il y a une #include "data.h" et dans le makefile, j'ai rajouté ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(OBJ_DIR)/data.o: data.c $(H_DIR)/data.h 
    	$(CC) $(CFLAGS) -c $< -o $@
    Et le linker ? Tu lui as dit qu'il y avait un $(OBJ_DIR)/data.o ?
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Dev-FX
    Le jeu fonctionne maintenant parfaitement sous windows
    La version que j'avais postée fonctionnait aussi...
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Dev-FX
    ,

    Tu as fait une grossière erreur dans ton code , j'ai failli moi même m'avoir
    Il n'y a pas d'erreur. struct x et x (objet) sont des identificateurs différents.

    On a même le droit de faire :
    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
     
    typedef struct x
    {
       int x;
    }
    x;
     
    void f (void)
    {
       {
          x x;
       }
       {
          struct x x;
       }
    }
    C'est pas lisible, mais c'est correct.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,
    Emmanuel Delahaye
    La version que j'avais postée fonctionnait aussi...
    Oui , c'est vrai , j'ai juste confirmé par une compil sous windows !

    Merci .

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Dev-FX
    Oui , c'est vrai , j'ai juste confirmé par une compil sous windows
    C'était une compilation sous Windows (Code::Blocks)
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Membre régulier Avatar de Dev-FX
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 93
    Points
    93
    Par défaut
    Salut ,

    Desolé , je savais pas ceci , je viens juste de l'apprendre , merci !

    Pour la compilation , j'ai pas fait attention (j'avais deja un projet ouvert ) et donc j'ai seulement ajouté les fichiers .

    Merci .

  20. #20
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    C'est bon, c'est bon, fausse alerte.

    J'avais effectivement oublié de le linker

    Un grand merci à vous tous, je vais pouvoir continuer pendant la semaine qui suit sans Internet entre la plage et les cocotiers .
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. L'interet de la programmation modulaire.
    Par giggs dans le forum C
    Réponses: 3
    Dernier message: 01/11/2006, 12h35
  2. programmation modulaire en C
    Par lastrecrue dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 28/06/2006, 21h03
  3. programmation modulair en C
    Par argon dans le forum C
    Réponses: 32
    Dernier message: 26/06/2006, 10h10
  4. programmation modulaire
    Par barbarello dans le forum C++
    Réponses: 2
    Dernier message: 19/02/2006, 13h04
  5. [Projet] Programmation modulaire d'un projet.
    Par loverdose dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 18/11/2005, 21h59

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