Desarrollando con GTK+: primeros pasos

¿Cómo empiezo?

Después de haber instalado GTK+, hay un par de cosas que pueden ayudarte a empezar a desarrollar aplicaciones con él. Está el Tutorial GTK+ http://www.gtk.org/tutorial/, el cual está en desarrollo. Esto te introducirá a la escritura de aplicaciones utilizando C.

El Tutorial no contiene (todavía) información en todos los widgets que existen en GTK+. Para código de ejemplo en como utilizar lo básico de todos los widgets GTK+, debes ver el archivo gtk/testgtk.c (y archivos fuentes asociados) dentro de la distribución. Revisar la distribución te dará una buena base sobre que pueden hacer los widgets.

Traté de compilar un pequeño Hola Mundo propio, pero falló. ¿Alguna pista?

Ya que eres bueno codificando, no lidiaremos con errores en tiempo de compilación :)

La línea de comando clásica para compilar un programa basado en GTK+ es

gcc -o myprog [c files] `gtk-config --cflags --libs`

Debes darte cuenta del carácter de comilla hacia atrás que es utilizado en esta línea de comando. Un error común cuando inicias un desarrollo basado en GTK+, es utilizar comillas en lugar de comillas hacia atrás. Si lo haces, el compilador se quejará sobre un archivo desconocido llamado gtk-config --cflags --libs. El texto en comillas hacia atrás es una instrucción a tu procesador de línea de comando para substituir la salida de la ejecución de este texto en la línea de comando.

La línea de comando de arriba se asegura de:

¿Qué hay sobre el uso de la utilidad make?

Este es un archivo make de ejemplo que compila un programa basado en GTK+:

# archivo make para aplicación básica GTK+
SOURCES = myprg.c foo.c bar.c
OBJS    = ${SOURCES:.c=.o}
CFLAGS  = `gtk-config --cflags`
LDADD   = `gtk-config --libs`
CC      = gcc
PACKAGE = myprg

all : ${OBJS}
  ${CC} -o ${PACKAGE} ${OBJS} ${LDADD}

.c.o:
  ${CC} ${CFLAGS} -c $<

# fin del archivo

Para más información sobre la utilidad make, debes leer la página man o la página info relevante.

Utilizo las comillas hacia atrás en mis archivos make, pero mi proceso make falló.

La construcción de comillas hacia atrás parece no ser aceptada por algunas utilidades make viejas. Si utilizas alguna de estas, el proceso make probablemente fallará. Para poder tener la sintaxis de comillas hacia atrás funcionando, debes utilizar la utilidad GNU make ( consíguela en el servidor ftp de GNU en ftp://ftp.gnu.org/).

Quiero agregar algunas cosas de configure. ¿Cómo puedo hacer esto?

Para utilizar autoconf/automake, primero debes instalar los paquetes relevantes. Estos son:

Encontrarás estos paquetes en el servidor principal de ftp de GNU (ftp://ftp.gnu.org/) o en cualquier espejo GNU.

Para poder utilizar el poderoso esquema autoconf/automake, debes crear un configure.in que puede lucir como:

dnl Procesa este archivo con autoconf para producir un configure script.
dnl configure.in para un programa basado en GTK+

AC_INIT(myprg.c)dnl
AM_INIT_AUTOMAKE(mypkgname,0.0.1)dnl
AM_CONFIG_HEADER(config.h)dnl

dnl Chequea programas
AC_PROG_CC dnl chequea el compilador c
dnl deberías agregar CFLAGS="" aquí, porque es fijado a -g por PROG_CC

dnl Chequea librerías.
AM_PATH_GTK(1.2.0,,AC_MSG_ERROR(mypkgname 0.1 needs GTK))dnl

AC_OUTPUT(
	Makefile
)dnl

Debes agregar un archivo Makefile.am:

bin_PROGRAMS    = myprg
myprg_SOURCES   = myprg.c foo.c bar.c
INCLUDES        = @GTK_CFLAGS@
LDADD           = @GTK_LIBS@
CLEANFILES      = *~
DISTCLEANFILES  = .deps/*.P

Si tu proyecto contiene más de un subdirectorio, deberás crear un Makefile.am en cada directorio además de un Makefile.am maestro que lucirá como:

SUBDIRS         = midir1 midir2 midir3

entonces, para utilizar estos, simplemente teclea lo siguientes comandos:

aclocal
autoheader
autoconf
automake --add-missing --include-deps --foreign 

Para más información, deberías revisar la documentación de autoconf y automake (los archivos info incluidos son bastante fáciles de entender, y hay una gran cantidad de recursos en el web que lidian con autoconf y automake).

Trato de eliminar errores en mi aplicación GTK+ con gdb, pero cuelga mi servidor X cuando llego a algún punto de parada. ¿Alguna idea?

De Federico Mena Quintero:

"X no esta trancado. Lo más seguro es que estás llegando a un punto de parada dentro de un callback llamado desde un lugar en Gtk que tiene el ratón agarrado."

"Corre tu programa con la opción --sync; hará más fácil la eliminación de errores. También, puede que quieras utilizar la consola para correr el debugger, y simplemente dejes el programa corriendo en otra consola con el servidor X."

Eric Mouw tiene otra solución:

"Una terminal vieja conectada a un puerto serie sin usar, también es grandioso para eliminar errores en programas X. Terminales viejas vt100/vt220 son baratísimas pero un poco difíciles de conseguir (aquí en los Países Bajos, YMMV[1])"

Notas

[1]

Nota del traductor: YMMV == Tu Millaje Puede Variar