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

Eclipse C & C++ Discussion :

Compiler wxwidgets sous eclipse c++


Sujet :

Eclipse C & C++

  1. #1
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut Compiler wxwidgets sous eclipse c++
    Voilà, jusqu'ici on codait sous Visual Studio ou je bosse et depuis peu, on a décidé de passer à Eclipse c++ et sous Linux en plus.

    On a donc installé une kubuntu sans soucis.
    Ensuite on a installé eclipse europa sans trop de soucis non plus.
    Puis on a ajouté le plugin c++ à eclipse sans trop de problème.

    Et on s'est lancé dans notre premier prog c++ sous eclipse, un helloworld (hello me) version qui s'affiche dans une wxMessageBox.

    Alors voilà, mes problèmes c'est comment configurer eclipse/c++ pour les link et pour le reste? Et plus particuliérement pour wxWidgets?

    Connaissez-vous une doc compléte à ce sujet?

    Je place le code de cet hello me ça parlera déjà plus:
    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 <iostream>
    #include <wx/wx.h>
    using namespace std;
     
    class myApp :
    	public wxApp
    {
    	bool	OnInit();
    	DECLARE_EVENT_TABLE()
    };
     
    IMPLEMENT_APP(myApp)
    BEGIN_EVENT_TABLE(myApp, wxApp)
    END_EVENT_TABLE()
     
    	bool myApp::OnInit(){
    		wxString toto = wxT("!!!Hello me!!!");
    		wxMessageBox(toto);
    		return true;
    		}

  2. #2
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Bon déjà, j'ai trouvé dans project->properties->C/C++ build->settings de quoi configurer gcc

    Donc on a modifié comme suit:
    GCC C++ compiler on a mis à "command line pattern" la valeur :"${COMMAND} `wx-config --cxxflags` ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}"
    GCC C++ Linker la valeur: "${COMMAND} `wx-config --libs` ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}"

    Et là c'est bon, on compile notre hello me.

    Par contre, l'étape d'aprés, je récupére l'un de nos projets fait sous visual qui compile trés bien sous visual.
    Et j'essaye de le compiler.

    Et là, arf, on aurait soi-disant des déclarations multiples.
    Donc vu que j'ai pas ces erreurs sous visual, je pense que ce sont de faux messages d'erreur dûs à un pb de config.

    Quelqu'un y voit clair?
    Merci pour toute aide d'avance.

  3. #3
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Salut,

    Eclipse cdt ne permet de compiler qu'un seul binaire par projet. On compile rarement un seul binaire par projet... je te conseille donc de gérer tes compilations à la main. Perso j'utilise cmake, mais tu peut aussi bien écrire des makefiles standard ou encore du scons. Je peut t'expliquer comment utiliser ces outils sans avoir à sortir de l'interface d'eclipse si ca t'interesse.

    a+

  4. #4
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Avec plaisir.

    J'attends ton post avec impatience.

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    en fait la solution la plus basique c'est de creer un projet standard (non managed), d'éditer un makefile, et puis d'utiliser la fenetre "make targets" pour appeler les cibles que tu as créé dans ton makefile

    si tu utilise cmake ou scons tu peut faire la meme chose, sauf qu'il faudra faire un "cmake .." ou un "scons ." plutot que "make", donc soit modifier l'executable par défaut dans "make target", soit les lancer avec le bouton "external tools" d'eclipse.

    finalement si tu utilise cmake, dans la dernière version, il y a un générateur eclipse cdt, assez pratique.
    http://www.cmake.org/Wiki/Eclipse_CDT4_Generator

    voilà, hésite pas si t'as d'autres questions

  6. #6
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Ok, donc les joies du make sous Eclipse.

    Ca a l'air plutôt simple comme ça.
    Malheureusement ça ne marche pas du premier coup.
    Ce serait trop beau.

    Donc, je suis parti sur notre projet, je n'en ai pas créé un nouveau.
    Alors la suite de mes actions:
    Une fois que j'ai sélectionné mon projet, je clique sur project->make target->create
    je nomme mon make: filemanager dans target name (au pasage, à quoi sert le champ Make target juste en dessous) et je clique sur create.

    Ensuite, je vais sur make target->build

    J'ai un gros paquet de lignes dans ma console qui finit par une erreur.
    J'ai 3 .cpp et j'obtiens trois .o.

    J'ose pas mettre l'intégralité du message de la console donc un bref résumé.
    Demandez si besoin de plus

    Building file: ../src/FileManager.cpp
    Invoking: GCC C++ Compiler
    ....
    Finished building: ../src/FileManager.cpp

    Building file: ../src/Module_FileManager.cpp
    Invoking: GCC C++ Compiler
    ....
    Finished building: ../src/Module_FileManager.cpp

    Building file: ../src/ZipFile.cpp
    Invoking: GCC C++ Compiler
    ....
    Finished building: ../src/ZipFile.cpp

    Building target: Module_FileManager
    Invoking: GCC C++ Linker
    ....
    collect2: ld returned 1 exit status
    make: *** [Module_FileManager] Error 1
    PS: pas eu le temps de m'y mettre plus tôt. J'étais sur un pb de socket et un autre de css en même temps. Merci pour l'aide en tout cas.

  7. #7
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Citation Envoyé par natoine Voir le message
    Ok, donc les joies du make sous Eclipse.
    lol, là on est d'accord que tu utilise le makefile que tu as écrit, eclipse n'y est pour rien si ca marche pas

    y'a claire un problème à l'édition de liens, essaye d'afficher ta commande de compilation pour voir ce qui cloche.

    "Make target" si tu ne le remplis pas, par défaut il va faire la première target qu'il trouve ("make all" par défaut). si tu veut compiler filemanager il faut remplir ce champ avec "filemanager".

  8. #8
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    hum hum

    lol, là on est d'accord que tu utilise le makefile que tu as écrit
    J'utilise le makefile généré par eclipse.
    Je me doute bien qu'il y a une étape de plus mais ça avait l'air magique sur le coup.
    Aprés Make j'en ai fait il y a longtemps...
    Et je dois dire que celui généré par eclipse m'a semblé bien baléze.

    Donc ma commande de compil... elle vient du makefile généré par eclipse, enfin je crois:

    g++ `wx-config --libs` -o"Module_FileManager" $(OBJS) $(USER_OBJS) $(LIBS)
    Qui donc tente de compiler tout ce qui est dans le projet Module_FileManager, à savoir 3 .cpp.

  9. #9
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ah ok excuse j'avais pas compris. par contre tu as raté une étape en effet, car dans mon avant dernier message je te disais que c'était beaucoup plus simple d'écrire des makefiles pour gérer ses binaires que d'utiliser le gestionnaire inclus dans eclipse (si make te rebute, utilise cmake ou scons). je te laisse relire la discussion et je suis dispo si t'as des questions.

  10. #10
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Bon alors là, je viens de découvrir un truc de malade:

    clic droit sur mon module -> properties -> C/C++ builds -> Settings -> Build artifact

    Et là, je mets Artifact type: Static Library.

    Ben oui parce qu'en fait c'est surtout de ça dont j'ai besoin pour l'instant faire de mes modules et de mes composants des librairies.
    Bon ok j'ai pas été clair là-dessus, mais je viens à peine de comprendre le truc.
    On porte notre appli windows vers Linux et j'ai pas mal de choses à apprendre.

    Du coup, eclipse compile sans soucis dans ces conditions.
    Je vais pouvoir faire de même pour tous les modules et composants de l'appli

    Bon je sens que y a quand même des choses qui m'échappent et avec tout ça je ne me suis pas vraiment replongé sur les makefile.

    Merci namelouk pour ton aide.
    Je reviendrai sûrement bientôt sur ce topic non résolu encore.

  11. #11
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ok tant mieux si ca marche comme ca, mais moi je trouve qd meme que 1 librairie ou 1 executable par projet c'est vite limitant
    a+

  12. #12
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Ca je suis bien d'accord, surtout qu'au final, je dois avoir une bonne dizaine de lib à compiler avant de compiler l'exécutable de notre appli.

    Bon je me repenche là-dessus lundi.
    Objectif: automatiser la compil de toutes les lib et de l'executable via makefile.
    Soit j'apprends à bien me servir du make de eclipse soit je me replonge dans les makefile et je fais à la mano.

    Vivement Lundi tiens.

  13. #13
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    soit tu utilise cmake, qui est simple, portable et ultra puissant.

  14. #14
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Alors va pour cmake.
    C'est installé.

    Maintenant j'apprends à l'utiliser.
    http://www.cmake.org/HTML/Documentation.html

  15. #15
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    cool.

    les quelques commandes don't t'as besoin pour démarrer ton projet c'est :

    add_executable
    add_library

    target_link_libraries

    include_directories
    link_directories

    et au cas où tu as besoin de quelques variables d'environnement, cf

    http://www.cmake.org/Wiki/CMake_Useful_Variables

  16. #16
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Bon je crois avoir compris mais j'ai un peu du mal à me lancer.
    Je précise que je suis en ligne de commandes.
    Dis moi si je me trompe.

    Donc tout d'abord, je crée un fichier CMakeLists.txt à la racine de mon projet.
    Je précise les sous-répertoires et cmake crée un CMakeLists.txt dans chacun de ces répertoires.

    Ensuite, je lance cmake -i à la racine de mon projet.
    Et là, j'ai une suite de questions/réponses qui me guident pour remplir ces fichiers.

    Bon de toute façon je vais tester.

  17. #17
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    il ne faut pas lancer "cmake -i" mais "cmake /chemin_de_ton_projet"

    et il faut le faire si possible dans un dossier à part, pour pouvoir supprimer les fichiers générés pas cmake (typiquement les makefiles)

  18. #18
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Bon on va faire du étape par étape parce que là je mouline un peu...

    Donc mon projet se décompose de la façon suivante:
    Un dossier appli avec un appli.cpp et un appli.h
    appli.cpp et appli.h ont de nombreuses dépendances includes .... .h
    Ces fichiers se trouvent dans un dossier Composants ou dans un dossier Modules.
    Chaque composant et chaque module ayant son propre dossier.
    Donc pour les .cpp des .h référencés, on aimerait faire des lib, une lib par composant et une lib par module.

    En fait j'aurai bien besoin d'un exemple. http://www.cmake.org/HTML/Examples.html y a celui-là mais je comprends pas vraiment comment on procéde.

  19. #19
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    +
    +-Appli
    +-Composant1
    +-Composant2


    le cmakelist de la racine doit ressembler à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    include_directories( Composant1 )
    include_directories( Composant2 )
    include_directories( Appli )# ca depend si tu as des .h dans ce dossier
     
    add_subdirectory( Composant1 )
    add_subdirectory( Composant2 )
    add_subdirectory( Appli )
    - les cmakelists de composant1 et composant2 doivent ressembler à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    add_library(composant1 source1.cpp source2.cpp)
    target_link_library(composant1 pthread) # par exemple
    le cmakelist d'Appli doit ressembler à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    add_executable(exec_name appli.cpp)
    target_link_libraries(exec_name composant1 composant2 )

Discussions similaires

  1. Compilation Maven sous Eclipse
    Par Mako 5013 dans le forum Maven
    Réponses: 5
    Dernier message: 22/03/2013, 15h25
  2. La compilation automatique sous Eclipse ne marche plus
    Par specsy dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 14/09/2008, 15h01
  3. Compilation C++ sous Eclipse
    Par kimlee dans le forum C++
    Réponses: 2
    Dernier message: 11/07/2008, 10h45
  4. Problème de compilation wxwidgets sous Linux
    Par Zoloom dans le forum wxWidgets
    Réponses: 0
    Dernier message: 12/05/2008, 02h50
  5. compilation prog avec wxwidget sous eclipse
    Par grabriel dans le forum Eclipse C & C++
    Réponses: 7
    Dernier message: 08/04/2008, 16h39

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