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 :

Code source commun Unix/Windows


Sujet :

C++

  1. #1
    Membre habitu�
    Inscrit en
    Septembre 2004
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 9
    Par d�faut Code source commun Unix/Windows
    Dans mon projet, certaines fonctions ne sont pas compatibles entre les systemes et j'aimerai donc savoir comment mettre ces fonctions dans les memes fichiers et ainsi savoir comment faire pour que les bonnes fonctions compilent sous le bon systeme sans generer d'erreur.

    Vous avez une id�e ?

  2. #2
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    En utilisant des biblioth�ques qui font d�j� abstraction de ces d�tails ?
    En utilisant des outils qui vont aider � reconnaitre les bons fichiers � compiler ? (autotools, bjam, aap, ...)

    Tu veux faire quoi ? (ta fonction fait quoi)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  3. #3
    Membre confirm�
    Inscrit en
    Avril 2002
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par d�faut
    tu peux entrer les directives

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define UNIX
    //#define WINDOWS
     
    #ifdef UNIX
    //mes fonction unix compatible
    ...
    #endif
     
    #ifdef WINDOWS
    //mes fonction
    ...
    #endif
    ainsi tu nas qu'une seulle ligne a metre en commentaire ou a decommenter pour complier sur les different systeme

    il y a possiblement un moyen de savoire sur quelle systeme tu tente de complier mais je ne le connait pas

    desole

  4. #4
    Membre habitu�
    Inscrit en
    Septembre 2004
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 9
    Par d�faut
    ce sont ces defines precisement qu'il faut utiliser pour que ca marche ?

  5. #5
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pas forc�ment besoin de #define. Cela d�pend de comment tu arrives � isoler les traitements sp�cifiques.
    D'o� le "que veux tu faire exactement" ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  6. #6
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    il me semble qu'un pattern "Fa�ade" serait appropri�.
    Tu peux ainsi encapsuler les d�pendances, et les rendre transparentes pour le reste du logiciel.
    Ce n'est que ta fa�ade qui g�re les d�pendances, � chacun ses responsabilit�s.

  7. #7
    Membre habitu�
    Inscrit en
    Septembre 2004
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 9
    Par d�faut
    Je pense separer mon code exactement le preconise philippe V, avec des define.

    Mais ce que je veux savoir c'est comment s'appelle le define qui correspond a Windows et egalement le nom qui correspond a celui d'UNIX (NetBSD plus precisement)...

  8. #8
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Pour Windows c'est WIN32, pour UNIX je dirais POSIX vu que �a doit �tre ce que tu utilises.
    Mais en g�n�ral c'est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    #ifdef WIN32 // Windows
     
    #else // le reste, UNIX en particulier
     
    #endif

  9. #9
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Ce n'est pas aussi simple que windows vs *nix avec deux malheureux symboles qui se battraient en duel. Pour voir le genre de symb�les que l'on pourrait tester et comment cela marche en version brute, regarde n'importe quel projet aux sources publiques qui utiliserait les autotools (p.ex. vim, mutt, wxWidgets, ...) ou des projets tout template comme boost.

    Pour ce genre de trucs, ce sont plut�t des bridges et non pas des fa�ades (qui "fusionnent" des interfaces) que l'on utilise vu que l'on a des trucs aux interfaces diff�rentes qui servent � remplir un m�me r�le. Le choix des unit�s de traductions � compiler se faisant au niveau du "gestionaire de compilation" (-> make, scons, bjam, aap, ...) qui aura une vision des trucs propres � la plateforme (-> 0 utilisation du preprocesseur).

    (tu n'as toujours pas r�pondu � ma question)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  10. #10
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    C'est aussi un cas typique de la factory, et dans le .cpp de ta factory, il faut bien que tu fasses ce genre de choses pour savoir quelle classe inclure / instancier.
    Utiliser des libs qui font l'abstraction �a part d'une bonne intention, mais si l'utilisation de fonctions non portables que tu fais est minime (genre lister le contenu d'un r�pertoire etc...), je comprend tout � fait qu'on veuille isoler de cette mani�re le code incrimin� plutto que de demander � l'utilisateur d'installer telle(s) ou telle(s) lib(s) en plus souvent bien plus grosse que son projet.

  11. #11
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    Effectivement, le "pont" est mieux adapt�.
    Maintenant, il faut voir le but recherch� s'il ne s'agit que de g�rer Windows/unix-like, les deux symboles qui se battent en duel peuvent suffire.
    Pr�cise ce que tu veux faire et (Luc||Aur�lien||Loulou) te r�pondra.

  12. #12
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par tut
    Maintenant, il faut voir le but recherch� s'il ne s'agit que de g�rer Windows/unix-like, les deux symboles qui se battent en duel peuvent suffire.
    M�me pas. Les unix font exploser ce nombre.
    As-tu d�j� vu la quantit� de tests r�alis�s par des ./configure ?

    @Aur�lien : Pas n�cessairement besoin de tests dans le .cpp. P.ex.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    // toto.hpp
    void f();
     
    // toto-nix.cpp
    void f() { code spécifique aux *nix }
     
    // toto-win32.cpp
    void f() { code spécifique à win32 }
    Au niveau du make/app/... on ne compilera qu'un seul des deux toto-xxx.cpp -> celui adapt� � la platerforme.
    Avec des classes, c'est pareil.
    Je trouve �a bien plus maintenable qu'une seule fonction au corps n fois plus gros et farci de #ifdef.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  13. #13
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    alors Windows / Posix peut-�tre ?
    un truc qui me d�range avec les configure/make et compagnie, c'est que tu rends le code d�pendant de la cha�ne de compilation.
    Si sous windows, tu utilises C++ Builder ou Visual ou DevCpp, qu'est-ce qui se passe ?

  14. #14
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par Luc Hermitte
    @Aur�lien : Pas n�cessairement besoin de tests dans le .cpp. P.ex.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    // toto.hpp
    void f();
     
    // toto-nix.cpp
    void f() { code spécifique aux *nix }
     
    // toto-win32.cpp
    void f() { code spécifique à win32 }
    Au niveau du make/app/... on ne compilera qu'un seul des deux toto-xxx.cpp -> celui adapt� � la platerforme.
    Avec des classes, c'est pareil.
    Je trouve �a bien plus maintenable qu'une seule fonction au corps n fois plus gros et farci de #ifdef.
    Hehe, je savais bien que t'avais une astuce derri�re la t�te. Je connaissais pas, effectivement c'est �l�gant. Mais j'en reviens � ma factory, typiquement on a:
    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
    17
    18
    19
    20
    21
     
    #include "Factory.h"
     
    // MyWindowBase est la classe abstraite de base
    // MyWindowWin32 est son implémentation sous Windows
    // MyWindowX11 est son implémentation sous systèmes X11
     
    #ifdef WIN32
    #include "MyWindowWin32.h"
    #else
    #include "MyWindowX11.h"
    #endif
     
    MyWindowBase * NewWindow()
    {
        #ifdef WIN32
        return new MyWindowWin32;
        #else
        return new MyWindowX11;
        #endif
    }
    Donc l'astuce du makefile pour compiler uniquement MyWindowWin32.cpp ou MyWindowX11.cpp ok, mais dans factory.cpp, je vois pas comment se passer d'une inclusion conditionnelle.

  15. #15
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par tut
    alors Windows / Posix peut-�tre ?
    un truc qui me d�range avec les configure/make et compagnie, c'est que tu rends le code d�pendant de la cha�ne de compilation.
    Si sous windows, tu utilises C++ Builder ou Visual ou DevCpp, qu'est-ce qui se passe ?
    Ben c'est pareil avec n'importe lequel de ces outils : ton projet est d�pendant de l'IDE utilis�. Si tu utilises VC++, tu ne peux compiler qu'avec ce dernier...

    Une solution c'est d'utilise un truc genre cmake, qui te g�n�re au choix un makefile UNIX, MS (nmake), un projet VC++, BCB, etc...
    Y'en a un autre �crit en python aussi je crois

  16. #16
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    Citation Envoy� par Aurelien.Regat-Barrel
    Si tu utilises VC++, tu ne peux compiler qu'avec ce dernier...
    pourquoi donc ?
    je crois que l'on ne se comprend pas trop.

    Je suis partisant de la solution bridge + #define, comme �a on ne se rend pas d�pendant d'option de make ou autre, et on peut utiliser ce que l'on veut comme IDE.
    De toute fa�on, on pourrait continuer ce genre de d�bat interressant pendant des heures, mais tant que l'on ne sait pas �xactement ce que l'on veut faire, �a ne sert � rien de commencer � le faire. Probl�me r�current du G�nie Logiciel

  17. #17
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    En ce moment, je m'amuse avec A-A-P, il y a aussi scons (en python aussi), bjam et quelques d'autres qui une fois install�s sont capables de s'adapter � l'outil que tu utilises pour compiler ton C++. Et ils g�rent pour toi toutes les d�pendances et c'est beau. Certains comme A-A-P savent aussi �changer avec le serveur CVS, publier des sites WWW, ...

    Pour le factory .cpp, c'est au choix. Soit effectivement tu fais un #ifxxx, soit tu scindes le factory.cpp en plusieurs unit�s de traductions "exclusives". Mais dans un exemple pareil, on a typiquement des ponts plus gros qu'une seule petite fonction comme celle l�. -> On a plusieurs fonctions dans le genre qui vont justifier de scinder l'unit� de traduction.

    Le truc est de trouver le bon compromis entre le nombre de param�tres qui peuvent varier et les TU que l'on pourrait extraire, pour la partie bas niveau.
    D'o� ma question de "quelle est la fonction � sp�cialiser ?".

    Apr�s, au fil des d�veloppements, on commence � avoir une ou plusieurs biblioth�ques qui font d�j� tout �a de mani�re transparente. Ce qui nous permet de nous proccuper de moins en moins de ces d�tails, et de nous concentrer sur le coeur de l'appli.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  18. #18
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    A voil�, scons.
    J'ai pas test� ce que tu as donn�, mais ce que j'appr�cie avec cmake c'est sa bonne int�gration sous Windows. On a une interface graphique pour configurer le build, et il est bien int�gr� avec VC++ (utilise pas mal de ses possibilit�s). Par exemple l� je lutte avec qmake (un autre truc du genre mais de chez Qt) qui me g�n�re des projets VC++ que je dois reprendre � la main
    cmake sait aussi tester l'installation de certaines libs en allant chercher leur path dans la base de registres et configurant automatiquement l'include path, etc...
    http://www.codeproject.com/tools/cmake.asp

Discussions similaires

  1. Deux ears avec du code source commun.
    Par demzem dans le forum D�veloppement Web en Java
    R�ponses: 4
    Dernier message: 10/10/2014, 09h22
  2. G�n�rateur de code source C# pour Windows Forms
    Par bbenh dans le forum D�buter
    R�ponses: 3
    Dernier message: 08/08/2009, 17h07
  3. Porter un code source delphi windows � linux
    Par Coussati dans le forum Delphi
    R�ponses: 4
    Dernier message: 08/10/2006, 00h58
  4. Solution de communication haut niveau Unix/Windows
    Par mi6fred dans le forum D�veloppement
    R�ponses: 2
    Dernier message: 05/05/2006, 20h11
  5. Je cherche le code-source d'un interface de Windows
    Par Robert A. dans le forum Windows
    R�ponses: 5
    Dernier message: 02/06/2003, 09h45

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