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:
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:
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:
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:
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:
gcc -std=c11 -Wall -fmax-errors=10 -Wextra callback.c -c -o libcallback.so `pkg-config --cflags --libs gtk+-3.0`
puis
Code:
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:
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 :mouarf:mais je suis toujours demandeur pour automatiser sous geany
Merci d'avance pour votre aide