| <?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"> |
| <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-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.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 gtk+-3.0` hello.c -o hello `pkg-config --libs gtk+-3.0` |
| </programlisting> |
| </para> |
| |
| <para> |
| Deprecated GTK+ functions are annotated to make the compiler |
| emit warnings when they are used (e.g. with gcc, you need to use |
| the -Wdeprecated-declarations option). If these warnings are |
| problematic, they can be turned off by defining the preprocessor |
| symbol %GDK_DISABLE_DEPRECATION_WARNINGS by using the commandline |
| option <literal>-DGDK_DISABLE_DEPRECATION_WARNINGS</literal> |
| </para> |
| |
| <para> |
| GTK+ deprecation annotations are versioned; by defining the |
| macros %GDK_VERSION_MIN_REQUIRED and %GDK_VERSION_MAX_ALLOWED, |
| you can specify the range of GTK+ versions whose API you want |
| to use. APIs that were deprecated before or introduced after |
| this range will trigger compiler warnings. |
| </para> |
| |
| <para> |
| Here is how you would compile hello.c if you want to allow it |
| to use symbols that were not deprecated in 3.2: |
| <programlisting> |
| $ cc `pkg-config --cflags gtk+-3.0` -DGDK_VERSION_MIN_REQIRED=GDK_VERSION_3_2 hello.c -o hello `pkg-config --libs gtk+-3.0` |
| </programlisting> |
| </para> |
| |
| <para> |
| And here is how you would compile hello.c if you don't want |
| it to use any symbols that were introduced after 3.4: |
| <programlisting> |
| $ cc `pkg-config --cflags gtk+-3.0` -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4 hello.c -o hello `pkg-config --libs gtk+-3.0` |
| </programlisting> |
| </para> |
| |
| <para> |
| The older deprecation mechanism of hiding deprecated interfaces |
| entirely from the compiler by using the preprocessor symbol |
| GTK_DISABLE_DEPRECATED is still used for deprecated macros, |
| enumeration values, etc. To detect uses of these in your code, |
| use the commandline option <literal>-DGTK_DISABLE_DEPRECATED</literal>. |
| There are similar symbols GDK_DISABLE_DEPRECATED, |
| GDK_PIXBUF_DISABLE_DEPRECATED and G_DISABLE_DEPRECATED for GDK, GdkPixbuf and |
| GLib. |
| </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> |
| |
| <refsect2> |
| <title>Useful autotools macros</title> |
| |
| <para> |
| GTK+ provides various macros for easily checking version and backends |
| supported. The macros are |
| <variablelist> |
| <varlistentry> |
| <term>AM_PATH_GTK_3_0([minimum-version], [if-found], [if-not-found], [modules])</term> |
| <listitem>This macro should be used to check that GTK+ is installed |
| and available for compilation. The four arguments are optional, and |
| they are: <emphasis>minimum-version</emphasis>, the minimum version |
| of GTK+ required for compilation; <emphasis>if-found</emphasis>, the |
| action to perform if a valid version of GTK+ has been found; |
| <emphasis>if-not-found</emphasis>, the action to perform if a valid |
| version of GTK+ has not been found; <emphasis>modules</emphasis>, a |
| list of modules to be checked along with GTK+.</listitem> |
| </varlistentry> |
| <varlistentry> |
| <term>GTK_CHECK_BACKEND([backend-name], [minimum-version], [if-found], [if-not-found])</term> |
| <listitem>This macro should be used to check if a specific backend |
| is supported by GTK+. The <emphasis>minimum-version</emphasis>, |
| <emphasis>if-found</emphasis> and <emphasis>if-not-found</emphasis> |
| arguments are optional.</listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| </refsect2> |
| |
| </refsect1> |
| </refentry> |