J'essaie d'utiliser make command pour construire. Je suis this . Je compile un code en utilisant les langages GTK + 2 et C
hp@ubuntu:~/amhello$ make
make all-recursive
make[1]: Entering directory `/home/hp/amhello'
Making all in src
make[2]: Entering directory `/home/hp/amhello/src'
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
main.c:3:20: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/home/hp/amhello/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/hp/amhello'
make: *** [all] Error 2
c'est le code main.c
#include<config.h>
#include<stdio.h>
#include<gtk/gtk.h>
void static call(GtkWidget *widget,gpointer data) {
g_print("%s \n",(gchar*) data);
}
int main(int agrc, char *agrv[]) {
gtk_init(&agrc,&agrv);
GtkWidget *window,*button;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"one button");
button=gtk_button_new_with_label("hello world");
g_signal_connect(button,"clicked",G_CALLBACK(call),(gpointer) "hello world");
gtk_container_set_border_width(GTK_CONTAINER(window),10);
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show_all(window);
gtk_main();
return (0);
}
Cela signifie que vous n'avez pas les en-têtes gtk pour construire des choses en utilisant GTK +. Est-ce vraiment étrange que l'erreur ne soit pas apparue à l'étape ./configure. Pour résoudre ce problème, il suffit de:
Sudo apt-get install libgtk2.0-dev
ou libgtk-3-dev
.
Ça devrait le faire.
Sudo apt-get install build-essential gnome-devel
Cela est également nécessaire pour pouvoir faire des choses cool comme:
g++ main.cpp -o base `pkg-config --cflags --libs gtk+-3.0`
Il vous permet d’utiliser pkg-config
pour gagner beaucoup de temps.
Le paquet debian/ubuntu équivalent à Gtk3 est libgtk-3-dev
Puisque vous utilisez autotools pour générer vos Makefiles, vous devez indiquer à automake comment trouver les dépendances de l’en-tête et de la bibliothèque de votre projet et les incorporer dans les Makefiles finaux. Ce n'est pas mon domaine d'expertise, mais je vais essayer de vous indiquer la bonne direction. La plupart des éléments suivants sont basés sur le didacticiel présenté à l'adresse - tilisation de bibliothèques C/C++ avec Automake et Autoconf
Tout d'abord, vous devez modifier le fichier configure.ac de niveau supérieur pour ajouter la dépendance Gtk-2.0. Vous pouvez utiliser la macro PKG_CHECK_MODULES
pour exécuter pkg-config
afin de trouver les directives d'inclusion et de bibliothèque correspondantes. Il est recommandé de vérifier que pkg-config
existe en premier. Nous devons donc également ajouter un test PKG_PROG_PKG_CONFIG
. Les parties en gras indiquent ce qui a été ajouté, par rapport aux fichiers du didacticiel amhello original à partir duquel vous avez commencé.
AC_INIT([amhello], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
dnl Test for pkg-config
PKG_PROG_PKG_CONFIG([0.22])dnl Test for gtk+
PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10])
AC_OUTPUT
Ensuite, dans votre src/Makefile.am
, vous pouvez récupérer CFLAGS et LIBS en utilisant l'identifiant GTK
que vous avez utilisé dans la macro PKG_CHECK_MODULES
ci-dessus.
bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}
Lorsque vous relancez make
name__, il doit générer de nouveau votre fichier src/Makefile avec les chemins d’inclusion -I
, -L
et les bibliothèques appropriés.