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

GTK+ avec C & C++ Discussion :

pb compilation conditionnelle sous geany


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Points : 88
    Points
    88
    Par défaut pb compilation conditionnelle sous geany
    Bonjour à tous les gtk_istes

    je débute moi aussi en Gtk+3 sous ubuntu 14

    j'aurai besoin d'un éclairage pour la compilation séparée cf ci-dessous.

    j'ai bien installé geany, gtk dev

    j'arrive à compiler un programme mono bloc où tout est dans un seul fichier.

    Mais pour des programmes plus complexes il va me falloir découper selon les règles de l'art en vigueur
    http://emmanuel-delahaye.developpez....e-c/#organiser

    j'ai repris un exemple qui me semble fonctionnel du moins à priori

    voici la découpe toute classique en 3 fichiers pour un cas simple
    le main ci dessous

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include "callback.h"
    //main.c
    int main (int argc, char **argv)
    {
      GtkWidget *p_window = NULL;
      GtkWidget *p_main_box = NULL;
     
      /* Initialisation de GTK+ */
      gtk_init (&argc, &argv);
     
      /* Creation de la fenetre principale de notre application */
      p_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      g_signal_connect (G_OBJECT (p_window), "destroy", G_CALLBACK (cb_quit), NULL);
     
      /* Creation du conteneur principal */
      p_main_box = gtk_box_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (p_window), p_main_box);
     
      /* Creation du bouton "Quitter" */
      {
        GtkWidget *p_button = NULL;
     
        p_button = gtk_button_new_with_label("application-exit");
        g_signal_connect (G_OBJECT (p_button), "clicked", G_CALLBACK (cb_quit), NULL);
        gtk_box_pack_start (GTK_BOX (p_main_box), p_button, FALSE, FALSE, 0);
      }
     
      /* Affichage de la fenetre principale */
      gtk_widget_show_all (p_window);
      /* Lancement de la boucle principale */
      gtk_main ();
      return EXIT_SUCCESS;
    }
    viens le fichier header du callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef H_CALLBACK
    #define H_CALLBACK
     
    #include <gtk/gtk.h>
     
    void cb_quit (GtkWidget *, gpointer);
     
    #endif /* not H_CALLBACK */
    puis le code du callback

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "callback.h"
     
    void cb_quit (GtkWidget *p_widget, gpointer user_data)
    {
      gtk_main_quit();
     
      /* Parametres inutilises */
      (void)p_widget;
      (void)user_data;
    }
    ligne de commande pour la compilation d'un seul fichier tout compris dans un j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Werror -Wall  main.c  -o main  `pkg-config --cflags --libs gtk+-3.0`
    et sa fonctionne
    Quelqu'un peut-il m'expliquer comment compiler les 3 fichiers du dessus SVP sa fait 3 soirées que je cherche sans trouver

    mes hypothèses
    j'ai les 3 fichiers sous un même répertoire les include "machin.h" sont bien ok ( #include "cb_boite.h")

    méthode 1 compilation à la main
    il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -std=c11 -Wall -fmax-errors=10 -Wextra callback.c   -c -o libcallback.so `pkg-config --cflags --libs gtk+-3.0`
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -std=c11 -Wall -fmax-errors=10 -Wextra main.c libcallback.so -o main `pkg-config --cflags --libs gtk+-3.0`
    méthode 2 avec un makefile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    main : main.c libcallback.so 
    	gcc -std=c11 -Wall -fmax-errors=10 -Wextra main.c libcallback.so -o main `pkg-config --cflags --libs gtk+-3.0`
    libcallback.so : callback.c callback.h 
    	gcc -std=c11 -Wall -fmax-errors=10 -Wextra callback.c   -c -o libcallback.so `pkg-config --cflags --libs gtk+-3.0`
    cette méthode fonctionne, l'ordre dans lequel chaque bloc est écrit n'a pas d'importance car make s'en débrouille mais à l'intérieur de chaque ligne gcc l'ordre est fondamental


    méthode 2 avec geany
    En écrivant je post j'ai trouvé mon erreur pour les méthodes 1 et 2 mais je suis toujours demandeur pour automatiser sous geany
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Tu es arrivé toi-même à la réponse .

    Pour que le code contenu dans le main.c compile, il faut bien entendu que les codes que tu y insères le soient aussi. Il faut donc ajouter à ta ligne de compilation tous les fichiers sources que tu désires insérer. Seuls ceux déjà compilés, par exemple la stdlib, ne sont pas à ajouter. Les fichiers objets existent déjà sur ta machine.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    ok merci de cette confirmation. Mais comment faire sous geany. c'est là mon dernier problème du moment

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Ne connaissant pas geany je suis aller voir de quoi il en retourne.

    C'est une éditeur de texte amélioré. Il ne te permet pas directement de compiler tous les fichiers dont tu as besoin. Il te faut pour cela configurer ton projet (pas le projet geany) avec des outils de compilation, les autotools étant les plus connus ou utilisés. Il en existe d'autres.

    Ces outils vont permettre, pour faire simple, de créer un fichier Makefile qui sera alors exécutable directement depuis geany avec l'outil make.

    Il va te falloir mettre encore un peu les mains dans le cambouis ...

  5. #5
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 329
    Points : 606
    Points
    606
    Par défaut
    Je n'utilise pas moi non plus Geany, mais je lis dans la doc du "build menu" http://www.geany.org/manual/current/...ml#build-menu:
    If you need complex settings for your build system, or several different settings, then writing a Makefile and using the Make commands is recommended; this will also make it easier for users to build your software.
    autrement dit, il vaut mieux confectionner une Makefile.
    GraceGTK: a plotting tool at https://sourceforge.net/projects/gracegtk

  6. #6
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Hello, juste une petite remarque, les autotools c'est juste une horreur pour le débutant, alors c'est pas ce que je conseillerais de prime abord. Les autotools, c'est utile quand on a besoin de reprendre du code qui les utilise (et il y a beaucoup de projets qui utilisent les autotools), savoir écrire un makefile à la main c'est bien aussi mais globalement, le bon build system c'est celui qui ne reste pas dans tes pattes à t'empêcher de coder. La quantité de pièges à éviter dans les makefiles et autotools est juste considérable.

    Donc pour un nouveau projet, je conseillerais plutôt CMake, voire mieux: meson. En bonus, avec meson ou le backend Ninja de CMake, c'est Ninja qui est utilisé à la place de make, et qui est beaucoup, beaucoup plus rapide.

    Exemple d'appli GTK2:
    cairo-curve.c
    meson.build.txt (à renommer en meson.build car le site n'accepte pas les fichiers *.build)

    Il suffit donc d'installer python3 (unique dépendance de meson), meson, ninja.
    Ensuite pour configurer le projet, il suffit d'aller dans le dossier qui contient le source, puis taper dans shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkdir build && cd build && meson ..
    Pour compiler, il suffit de taper dans le dossier de build:
    Si tu veux vraiment de l'intégration avec Geany, qui n'a pas l'air de connaitre ninja, au pire utilise CMake avec le backend make. Ça reste quand même plus accessible que les autotools.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    bonjour
    Merci de tous ces bons conseils. Je reste un grand débutant devant la complexité des makefile. J'ai trouvé quelques tuto qui ont commencé à m'éclairer . Mais c'est encore gagné. J'en utilise quelques uns sans en comprendre à fond tous les éléments

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2015, 11h57
  2. syntaxe pour compilation conditionnelle ?
    Par tintin72 dans le forum C
    Réponses: 9
    Dernier message: 17/05/2005, 18h12
  3. [Kylix] Compiler FMA
    Par dodik dans le forum EDI
    Réponses: 1
    Dernier message: 17/01/2005, 10h51
  4. [CODE] Compilation conditionnelle ?
    Par Cornell dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2003, 18h16

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