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

Autres éditeurs Discussion :

g++ et arborescence complexe


Sujet :

Autres éditeurs

  1. #1
    Membre à l'essai
    Profil pro
    ingénieur informatique R&D
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur informatique R&D

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 18
    Points
    18
    Par défaut g++ et arborescence complexe
    Voila j'ai fais mon progrmme en c++ sous linux.
    Mais j'ai voulus le compilé.

    l'arborescence de mes fichiers est comme cela:

    ../racine
    |
    ---objet
    |
    ----objet.h
    |
    -----objet.cpp
    |
    ----fonction1
    |
    -----fonction1.h
    |
    -----fonction1.cpp
    |
    |
    -----fonction2
    |
    -------fonction2.h
    |
    -----fonction2.cpp
    |
    -------main.h
    |
    |
    -------main.c
    le code des différents fichiers:

    objet.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "objet.h"
    .......



    fonctionx.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "objet.h"
    ......

    fonctionx.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "fonctionx.h"
    ....

    main.c

    main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "fonction1/fonction1.h"
    #include "fonction2/fonction2.h"
    note: le x peut-être remplacé par 1 ou 2.

    aprés quelque recherche j'ai découvert qu'il fallait mettre le fichier objet.cpp en librairie statique.
    Mais si je veux compiler fonction1.cpp il me met une erreur comme quoi il ne connait le objet.h

    le make

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    g++ objet.c -o 
     
    ar rcs libobjet.a objet.o
     
    g++ fonction1.cpp -L -libobjet -o
     
    g++ fonction2.cpp -L -libobjet -o
     
    g++ main.cpp -c fonction1.o fonction2.o -L -libobjet  -c main

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par polric Voir le message
    le make

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    g++ objet.c -o 
     
    ar rcs libobjet.a objet.o
     
    g++ fonction1.cpp -L -libobjet -o
     
    g++ fonction2.cpp -L -libobjet -o
     
    g++ main.cpp -c fonction1.o fonction2.o -L -libobjet  -c main
    Ceci n'est pas un Makefile et tout est à revoir.

    D'où compiles-tu ? Depuis la racine, je suppose.

    Pour compiler, g++ -c objet.cpp (et non objet.c).
    g++ -Wall -c objet.cpp sera du meilleur effet.

    Pourquoi faire une librairie ? Ce serait justifié si tu avais deux exécutables mais là...

    -L permet de spécifier un répertoire où se trouve une librairie. Sans répertoire, ça ne sert à rien.
    De même, tu peux faire usage de -I qui permet d'indiquer où se trouve des headers.
    Au lieu de faire usage de -I, tu peux aussi t'arranger pour que l'header objet.h colle comme fonction1.h et fonction2.h en incluant dans tes fichiers objet/objet.h à la place de objet.h.
    Quand tu veux linker avec une librairie de nom libobjet, tu dois ajouter -lobjet et non -libobjet.

    Je te propose quelque chose de très basique à enregistrer dans un fichier Makefile à la racine et en lançant make dessus. Je n'ai pas testé. A toi de voir si ça colle...

    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
     
    objet.o : objet/objet.h objet/objet.cpp
    	g++ -Wall -c objet/objet.cpp
     
    fonction1.o : fonction1/fonction1.h objet/objet.h fonction1/fonction1.cpp
    	g++ -Wall -I objet -c fonction1/fonction1.cpp
     
    fonction2.o : fonction2/fonction2.h objet/objet.h fonction2/fonction2.cpp
    	g++ -Wall -I objet -c fonction2/fonction2.cpp
     
    main.o : fonction1/fonction1.h fonction2/fonction2.h objet/objet.h main.h main.c
    	g++ -Wall -I objet -c main.c
     
    main: objet.o fonction1.o fonction2.o main.o
    	g++ -o main objet.o fonction1.o fonction2.o main.o

  3. #3
    Membre à l'essai
    Profil pro
    ingénieur informatique R&D
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur informatique R&D

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    merci de ta réponse .
    mais j'avais déjà essayé cette méthode(note les .h ne sont pas obligatoire enfin je crois).
    mais je suis toujours au même point.
    cela ne marche pas,il ne trouve pas le objet.h lorsqu'il compile fonctionx.cpp.

    Si je change mon arborescence je peux compiler mais cela un peu cochon de mettre toutes mes fonctions dans un même répertoire car celle-ci sont aussi composé de plusuieurs fichier.Mais je veux seulement partager uun objet entre plusieurs fonctions tout en les séparants dans des répertoires différents.



    edit : j'ai trouvé un moyen en créant un racourcis vers le dossier objet dans les répertoires fonctionx.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Si tu trouves un peu cochon de mettre tous tes fonctions dans un même répertoire, alors que dire de cela
    j'ai trouvé un moyen en créant un racourcis vers le dossier objet dans les répertoires fonctionx.
    Ca, c'est vraiment cochon et on peut largement s'en passer.

    Depuis quel répertoire veux-tu compiler fonctionx.cpp ?

    Si c'est depuis la racine,
    g++ -Wall -I objet -c fonction1/fonction1.cpp

    Depuis fonction1,
    g++ -Wall -I ../objet -c fonction1.cpp

  5. #5
    Membre à l'essai
    Profil pro
    ingénieur informatique R&D
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur informatique R&D

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Le problème vient de la déclaration de objet.h dans les fichiers des fonctionx.h.
    mais je sais pas comment le résoudre.
    Ma solution résouds aussi le probleme de version histoire ne pas traîne 2 objet.h que je mettre a jours a chaque modif.

  6. #6
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "object/objet.h"
    roulez jeunesse.

  7. #7
    Membre à l'essai
    Profil pro
    ingénieur informatique R&D
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur informatique R&D

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    cela marche pas car il cherche le répertoire objet dans le répertoire fonctionx or il n'existe pas.

  8. #8
    screetch
    Invité(e)
    Par défaut
    pourquoi ne pas compiler a la racine au lieu de descendre ?

    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "../object/objet.h"
    ou mieux
    et
    g++ -I../objet functionx.cpp

    comme l'a deja suggeré aoyou

  9. #9
    Membre à l'essai
    Profil pro
    ingénieur informatique R&D
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur informatique R&D

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    merci, l'histoire de "../" marche nickel.

    Probème résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Arborescence d'un code complexe fortran
    Par coolpix77 dans le forum Fortran
    Réponses: 2
    Dernier message: 29/08/2014, 17h20
  2. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33
  3. Réponses: 7
    Dernier message: 07/04/2003, 09h35
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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