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