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 :

probleme de makefile


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut probleme de makefile
    bonsoir à tous,

    voila j'ai un programme block et il faut que j'en fasse un makefile.
    je suis sous linux (fedora 7),

    le probleme étant que j'utilise deux structures (REGLE et FAIT)
    et la grande partie de mes fonctions utilise ces structure.
    dans mon makefile j'ai séparé les fonctions d'affichage de saisie et autres.

    1) ma premiere question est : où dois-je faire la definitions de mes structures? (dans un .h?)

    2) où mettre les variables déclarées (dans le prog bloc) dans le main ?

    merci si besoin est je détaillerai un peu plus

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    1) La définition des structures dans ton cas est forcément dans un header inclus par les différents sources utilisant ces structures.
    Cela dit, d'après moi c'est pas systematique (le fait de devoir mettre les définitions de structure dans un .h), il faut mettre dans le header que ce qui est "public" (et le reste dans le .c -- mais dans ton cas ya pas de .c) ; enfin t'en es pas là.

    2) Comment ça?

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par calagan Voir le message
    bonsoir à tous,

    voila j'ai un programme block et il faut que j'en fasse un makefile.
    je suis sous linux (fedora 7),

    le probleme étant que j'utilise deux structures (REGLE et FAIT)
    et la grande partie de mes fonctions utilise ces structure.
    dans mon makefile j'ai séparé les fonctions d'affichage de saisie et autres.

    1) ma premiere question est : où dois-je faire la definitions de mes structures? (dans un .h?)

    2) où mettre les variables déclarées (dans le prog bloc) dans le main ?

    merci si besoin est je détaillerai un peu plus
    C'est pas très clair... Je ne comprends pas très bien comment ton programme est organisé. Dès lors, il est difficile de parler de makefile à ce stade. Pour déterminer ce qui doit être déclaré dans un fichier d'en-tête, et ce qui doit être déclaré directement dans le fichier source, la règle que j'applique est la suivante:

    Un couple en-tête/source représente un composant logiciel ou un bloc fonctionnel. Ce module présente une interface publique qui lui permettra d'être utilisé par les autres composants de ton programme. Ainsi, l'interface publique de ton module se compose essentiellement de fonctions et de structures que tu déclares dans le fichier d'en-tête. Tout le reste fait partie de la vie privée du module en question et doit se trouver dans le fichier source.

    Il s'agit là d'une vue très simplifiée, mais pour des programmes pas trop complexes, ça semble être une pratique adaptée. Pour plus d'infos sur la manière d'organiser ton code source:

    http://emmanuel-delahaye.developpez....ganiser_source

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Par défaut
    pour faire un peu à la barbare ce que tu veux faire, mets ta structure dans un .h que tu inclu où tu veux.

    et n'oublie pas de mettre avant ta structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef NOMDEMASTRUCTURE_H_
    #define NOMDEMASTRUCTURE_H_
     
    struct mastructure { ... };
     
    #endif /* NOMDEMASTRUCTURE_H_ */
    c'est très bourrin, mais ça marche.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par dridri Voir le message
    pour faire un peu à la barbare ce que tu veux faire, mets ta structure dans un .h que tu inclu où tu veux.

    et n'oublie pas de mettre avant ta structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     #ifndef NOMDEMASTRUCTURE_H_
    #define NOMDEMASTRUCTURE_H_
     
    struct mastructure { ... };
     
    #endif /* NOMDEMASTRUCTURE_H_ */
    c'est très bourrin, mais ça marche.
    Pourquoi à la barbare? Si la structure en question fait partie d'une interface publique qu'on désire exporter, c'est effectivement dans un fichier d'en-tête qu'il faut placer sa déclaration. Maintenant, si le programme est bien conçu, la structure fait partie d'interface (bloc fonctionnel, type abstrait de donnée) qui possède son fichier d'en-tête. Il ne faut donc pas créer un fichier spécifique pour cela.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    merci pour vos réponse.
    en effet je pense avoir fait quelque chose d'assez bourrin mais sa marche.
    j'ai créer un "includes.h" dans lequel j'ai mis tous mes prototypes de fonctions ainsi que mes structures.
    ensuite j'inclu se fichiers dans tous les fichiers.c de mon programme .
    je lance le make et tout marche.

    mais l'idéale serait d'associer chaque fichier.c à son .h qui lui est propre.
    Et c là que j'ai le probleme avec ma structure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct fait
    {
    	char nom_fait[32];
    	struct fait*suiv;
    }FAIT;
     
    typedef struct regle
    {
    	char nom_regle[32];
    	int num_regle;
    	FAIT*tete_fait;
    	struct regle*suiv;
    }REGLE;
    j'ai 4 fichier.c dans laquelle j'ai des prototypes de fonction de types
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REGLE* Insert_Regle(REGLE* Tete,REGLE* Nouv);
    int chainage_arriere(char *But,REGLE*tete_regle,FAIT*tete_fait);
    .....
    Et la je ne sais pas comment mettre mes structures.
    alors j'ai essayé de me créer un st.h où je met mes structures.
    j'inclue ce fichier dans tous les autres .h--> sa marche pas.

    je déclare mes structures en globales dans le main -->sa marche pas

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par calagan Voir le message
    j'ai 4 fichier.c dans laquelle j'ai des prototypes de fonction de types
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REGLE* Insert_Regle(REGLE* Tete,REGLE* Nouv);
    int chainage_arriere(char *But,REGLE*tete_regle,FAIT*tete_fait);
    .....
    Et la je ne sais pas comment mettre mes structures.
    alors j'ai essayé de me créer un st.h où je met mes structures.
    j'inclue ce fichier dans tous les autres .h--> sa marche pas.

    je déclare mes structures en globales dans le main -->sa marche pas
    Mauvaise organisation du code. Je te conseille de lire ceci et de t'en inspirer fortement :

    http://emmanuel-delahaye.developpez.com/codage.htm

    Au besoin, poste tout ton code et je te montre comment le réorganiser de façon logique.

Discussions similaires

  1. [débutant]probleme avec makefile-module objet non créé
    Par Invité dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 13/06/2007, 18h22
  2. probleme de makefile
    Par felicity dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 23/05/2006, 13h15
  3. probleme de makefile
    Par semaj_james dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 09/02/2006, 16h03
  4. Probleme de makefile
    Par realmadrid dans le forum Systèmes de compilation
    Réponses: 2
    Dernier message: 11/01/2006, 16h47
  5. Probleme de Makefile
    Par hoeg dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 31/03/2005, 19h01

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