<?xml version="1.0"?> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [ ]> <refentry id="gtk-compiling" revision="4 Feb 2001"> <refmeta> <refentrytitle>Compiling GTK+ Applications</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>GTK Library</refmiscinfo> </refmeta> <refnamediv> <refname>Compiling GTK+ Applications</refname> <refpurpose> How to compile your GTK+ application </refpurpose> </refnamediv> <refsect1> <title>Compiling GTK+ Applications on UNIX</title> <para> To compile a GTK+ application, you need to tell the compiler where to find the GTK+ header files and libraries. This is done with the <literal>pkg-config</literal> utility. </para> <para> The following interactive shell session demonstrates how <literal>pkg-config</literal> is used (the actual output on your system may be different): <programlisting> $ pkg-config --cflags gtk+-3.0 -pthread -I/usr/include/gtk-3.0 -I/usr/lib64/gtk-3.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 $ pkg-config --libs gtk+-3.0 -pthread -lgtk-x11-3.0 -lgdk-x11-3.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-3.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 </programlisting> </para> <para> The simplest way to compile a program is to use the "backticks" feature of the shell. If you enclose a command in backticks (<emphasis>not single quotes</emphasis>), then its output will be substituted into the command line before execution. So to compile a GTK+ Hello, World, you would type the following: <programlisting> $ cc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello </programlisting> </para> <para> If you want to make sure that your program doesn't use any deprecated functions, you can define the preprocessor symbol GTK_DISABLE_DEPRECATED by using the command line option <literal>-DGTK_DISABLE_DEPRECATED=1</literal>. There are similar symbols GDK_DISABLE_DEPRECATED, GDK_PIXBUF_DISABLE_DEPRECATED and G_DISABLE_DEPRECATED for GDK, GdkPixbuf and GLib. </para> <para> If you want to make sure that your program doesn't use any functions which may be problematic in a multihead setting, you can define the preprocessor symbol GDK_MULTIHEAD_SAFE by using the command line option <literal>-DGTK_MULTIHEAD_SAFE=1</literal>. </para> <para> Similarly, if you want to make sure that your program doesn't use any functions which may be problematic in a multidevice setting, you can define the preprocessor symbol GDK_MULTIDEVICE_SAFE by using the command line option <literal>-DGTK_MULTIDEVICE_SAFE=1</literal>. </para> <para> The recommended way of using GTK+ has always been to only include the toplevel headers <filename>gtk.h</filename>, <filename>gdk.h</filename>, <filename>gdk-pixbuf.h</filename>. If you want to make sure that your program follows this recommended practise, you can define the preprocessor symbols GTK_DISABLE_SINGLE_INCLUDES and GDK_PIXBUF_DISABLE_SINGLE_INCLUDES to make GTK+ generate an error when individual headers are directly included. There are some exceptions: <filename>gdkkeysyms.h</filename> is not included in <filename>gdk.h</filename> because the file is quite large; see <link linkend="gdk-Keyboard-Handling">Key Values documentation</link>. <filename>gdkx.h</filename> must be included independently because It's platform-specific; see <link linkend="gdk-X-Window-System-Interaction">X Window System Interaction</link> documentation. The same for <filename>gtkunixprint.h</filename> if you use the non-portable <link linkend="GtkPrintUnixDialog">GtkPrintUnixDialog</link> API. </para> </refsect1> </refentry>