gtk3/docs/reference/gtk/html/gtk-compiling.html
2022-06-01 16:13:05 +01:00

154 lines
7.2 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Compiling GTK+ Applications: GTK+ 3 Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="GTK+ 3 Reference Manual">
<link rel="up" href="platform-support.html" title="Part VII. GTK+ Platform Support">
<link rel="prev" href="gtk-building.html" title="Compiling the GTK+ libraries">
<link rel="next" href="gtk-running.html" title="Running GTK+ Applications">
<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="platform-support.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gtk-building.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gtk-running.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gtk-compiling"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle">Compiling GTK+ Applications</span></h2>
<p>Compiling GTK+ Applications —
How to compile your GTK+ application
</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
<a name="id-1.8.3.3"></a><h2>Compiling GTK+ Applications on UNIX</h2>
<p>
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
<code class="literal">pkg-config</code> utility.
</p>
<p>
The following interactive shell session demonstrates how
<code class="literal">pkg-config</code> is used (the actual output on
your system may be different):
</p>
<pre class="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
</pre>
<p>
</p>
<p>
The simplest way to compile a program is to use the "backticks"
feature of the shell. If you enclose a command in backticks
(<span class="emphasis"><em>not single quotes</em></span>), then its output will be
substituted into the command line before execution. So to compile
a GTK+ Hello, World, you would type the following:
</p>
<pre class="programlisting">
$ cc `pkg-config --cflags gtk+-3.0` hello.c -o hello `pkg-config --libs gtk+-3.0`
</pre>
<p>
</p>
<p>
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 <a href="../html/gdk3-General.html#GDK-DISABLE-DEPRECATION-WARNINGS:CAPS"><code class="literal">GDK_DISABLE_DEPRECATION_WARNINGS</code></a> by using the commandline
option <code class="literal">-DGDK_DISABLE_DEPRECATION_WARNINGS</code>
</p>
<p>
GTK+ deprecation annotations are versioned; by defining the
macros <a href="../html/gdk3-General.html#GDK-VERSION-MIN-REQUIRED:CAPS"><code class="literal">GDK_VERSION_MIN_REQUIRED</code></a> and <a href="../html/gdk3-General.html#GDK-VERSION-MAX-ALLOWED:CAPS"><code class="literal">GDK_VERSION_MAX_ALLOWED</code></a>,
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.
</p>
<p>
Here is how you would compile hello.c if you want to allow it
to use symbols that were not deprecated in 3.2:
</p>
<pre class="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`
</pre>
<p>
</p>
<p>
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:
</p>
<pre class="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`
</pre>
<p>
</p>
<p>
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 <code class="literal">-DGTK_DISABLE_DEPRECATED</code>.
There are similar symbols GDK_DISABLE_DEPRECATED,
GDK_PIXBUF_DISABLE_DEPRECATED and G_DISABLE_DEPRECATED for GDK, GdkPixbuf and
GLib.
</p>
<p>
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 <code class="literal">-DGTK_MULTIDEVICE_SAFE=1</code>.
</p>
<div class="refsect2">
<a name="id-1.8.3.3.11"></a><h3>Useful autotools macros</h3>
<p>
GTK+ provides various macros for easily checking version and backends
supported. The macros are
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">AM_PATH_GTK_3_0([minimum-version], [if-found], [if-not-found], [modules])</span></p></td>
<td>This macro should be used to check that GTK+ is installed
and available for compilation. The four arguments are optional, and
they are: <span class="emphasis"><em>minimum-version</em></span>, the minimum version
of GTK+ required for compilation; <span class="emphasis"><em>if-found</em></span>, the
action to perform if a valid version of GTK+ has been found;
<span class="emphasis"><em>if-not-found</em></span>, the action to perform if a valid
version of GTK+ has not been found; <span class="emphasis"><em>modules</em></span>, a
list of modules to be checked along with GTK+.</td>
</tr>
<tr>
<td><p><span class="term">GTK_CHECK_BACKEND([backend-name], [minimum-version], [if-found], [if-not-found])</span></p></td>
<td>This macro should be used to check if a specific backend
is supported by GTK+. The <span class="emphasis"><em>minimum-version</em></span>,
<span class="emphasis"><em>if-found</em></span> and <span class="emphasis"><em>if-not-found</em></span>
arguments are optional.</td>
</tr>
</tbody>
</table></div>
<p>
</p>
</div>
</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.33.1</div>
</body>
</html>