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 :

Ne pas compiler certains bouts de code


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut Ne pas compiler certains bouts de code
    Bonjour.
    Désolé pour le titre pourri, mais franchement je vois difficilement comment résumer ça.

    Je m'explique :
    Sous VC++2007, j'ai deux projet dans ma solution (ils compilent donc en même temps) qui ont des fichiers de classes en commun. Je voudrais que certaines méthodes de ces classes soient compilées par un projet mais pas par l'autre.

    Donc en gros, voici ce que je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Fichier mainApp.h, appartenant uniquement au projet 1
    ...
    #define IS_MAIN_APPLICATION
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Fichier maclasse.h
     
    classe Maclasse{
    public:
        void methode_en_commun();
     
        #ifdef IS_MAIN_APPLICATION
        void methode_que_seul_projet1_devrait_posseder();
        #endif
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Fichier maclasse.cpp
    #include maclase.h
     
    void Maclasse::methode_en_commun(){...}
     
    #ifdef IS_MAIN_APPLICATION
    void Maclasse::methode_que_seul_projet1_devrait_posseder(){...}
    #endif
    Le projet 2 ne compilant pas le fichier mainApp.h, pour lui tout se passe bien.
    Par contre, le projet 1 compile la déclaration de methode_que_seul_projet1_devrait_posseder() dans maclasse.h, mais il saute l'implémentation de cette fonction dans maclasse.cpp
    => Du coup ça me fait une erreur de link (lnk 2019).

    Vous avez une idée ?
    Merci d'avance.

    Martin

  2. #2
    Membre régulier Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 81
    Points
    81
    Par défaut
    essaie sans mettre d'espace avant ton #.
    y a des compilo qui n'aime pas .

  3. #3
    Membre régulier Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 81
    Points
    81
    Par défaut
    Erreur de ma part, je viens d'essayer avec visual, y a pas de soucis avec les espace avant # désolé.

    Sinon, ton MainApp.h il est inclus ou ?

  4. #4
    Membre régulier Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 81
    Points
    81
    Par défaut
    Désolé, j'ai écris n'importe quoi.
    Soucis avec mon clavier
    Je reprends:
    As tu essayé de définir ta directive avec les propriétés de ton projet dans visual et non dans un fichier include avec #define.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par fdubks
    As tu essayé de définir ta directive avec les propriétés de ton projet dans visual et non dans un fichier include avec #define.
    Ahh en voilà une bonne idée ! Je le sens bien ça.
    Le seul soucis, c'est que je ne savais même pas qu'on pouvait définir des directives dans les propriétés d'un projet, et j'ai beau chercher dans la fenêtre Propriétés, je ne trouve pas où ni comment le faire

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Propriétés du projet -> C/C++ -> Preprocessor -> Preprocessor definitions

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Utiliser l'heritage me semble etre une solution plus propre.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Wouhou !!!
    T'es trop fort fdubks !
    Et merci aussi à toi, Laurent Gomila.

    En effet, il fallait bien déclarer la directive en amont, dès le préprocesseur pour qu'il puisse prendre -ou ne pas prendre- en compte les bouts de codes dans les fichers cpp.

    Ok merci et à bientôt.

    Martin

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Utiliser l'heritage me semble etre une solution plus propre.
    Ben en fait pas vraiment, selon mon avis, car il s'agit de faire deux version d'un même logiciel : une avec une interface graphique, et une juste avec le moteur, destinée à être exportée en dll.
    En fait, mes bouts de codes en trop pour la version dll sont des fonctions utilisant openGL.
    L'exemple que j'ai donné ici n'est une vision très réductrice, qui aurait du en effet être codé avec un héritage.


    Martin

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par martt_1er
    Ben en fait pas vraiment, selon mon avis, car il s'agit de faire deux version d'un même logiciel : une avec une interface graphique, et une juste avec le moteur, destinée à être exportée en dll.
    Il y a bien un probleme de conception. Il faudrait structurer ton programme avec GUI pour qu'il puisse utiliser le code de la DLL sans modification (ou meme utiliser la DLL telle quelle).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #11
    Membre régulier Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 81
    Points
    81
    Par défaut
    Même avis que Jean-Marc, si ton soucis est a ce niveau (moteur/IU), il faudrait revoir ta conception.
    Les directives de compilation ne sont pas normalement utilisé dans ce cas.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Entièrement d'accord avec toi !
    Et si c'était le seul problème de conception !
    Seulement un projet, ça vire de bord, ça se modifie, des trucs se rajoutent et les deadlines se rapprochent
    Mais je suis d'accord que lorsque tout est parfaitement définit à la base, tout va pour le mieux dans meilleurs des mondes possible !

    Je reverrai ça si il me reste un peu de temps.

    Martin

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

Discussions similaires

  1. Compilation Conditionnelle (ne pas inclure certaines DLL)
    Par sk8world dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 16/01/2008, 16h16
  2. [MySQL] La page ne s'affiche pas avec ce bout de code
    Par mimagyc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/08/2007, 23h56
  3. Réponses: 2
    Dernier message: 18/05/2007, 12h34
  4. Réponses: 23
    Dernier message: 26/04/2006, 19h58

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