Компиляция приложений GTK+
Компиляция приложений GTK+ — Как скомпилировать ваше приложение GTK+
Компиляция приложений GTK+ в UNIX-подобных системах
Для компиляции приложения GTK+ необходимо указать компилятору, где находятся заголовочные файлы и библиотеки GTK+. Это делается с помощью утилиты pkg-config.
Следующий интерактивный сеанс оболочки демонстрирует, как используется pkg-config (реальный вывод на вашей системе может отличаться):
$ 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
Самый простой способ скомпилировать программу — использовать функцию «обратные кавычки» оболочки. Если вы заключите команду в обратные кавычки (не в одинарные кавычки), то её вывод будет подставлен в командную строку перед выполнением. Таким образом, для компиляции GTK+ «Привет, мир!» вы напечатаете следующее:
$ cc `pkg-config --cflags gtk+-3.0` hello.c -o hello `pkg-config --libs gtk+-3.0`
Функции GTK+, которые устарели, помечены таким образом, чтобы компилятор выдавал предупреждения при их использовании (например, с gcc вам нужно использовать опцию -Wdeprecated-declarations). Если эти предупреждения проблемны, их можно отключить, определив препроцессорную константу GDK_DISABLE_DEPRECATION_WARNINGS, используя опцию командной строки -DGDK_DISABLE_DEPRECATION_WARNINGS
Аннотации устаревания GTK+ имеют версионность; определив макросы GDK_VERSION_MIN_REQUIRED и GDK_VERSION_MAX_ALLOWED, вы можете указать диапазон версий GTK+, API которых вы хотите использовать. API, которые устарели до или были добавлены после этого диапазона, вызовут предупреждения компилятора.
Вот как вы скомпилируете hello.c, если хотите разрешить использование символов, которые не устарели в версии 3.2:
$ 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`
А вот как вы скомпилируете hello.c, если не хотите использовать символы, добавленные после версии 3.4:
$ 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`
Более старый механизм устаревания, позволяющий полностью скрыть устаревшие интерфейсы от компилятора с использованием препроцессорной константы GTK_DISABLE_DEPRECATED, всё ещё используется для устаревших макросов, значений перечислений и т.д. Для обнаружения использования этих элементов в вашем коде используйте опцию командной строки -DGTK_DISABLE_DEPRECATED. Аналогичные константы GDK_DISABLE_DEPRECATED, GDK_PIXBUF_DISABLE_DEPRECATED и G_DISABLE_DEPRECATED существуют для GDK, GdkPixbuf и GLib соответственно.
Аналогично, если вы хотите убедиться, что ваша программа не использует функции, которые могут быть проблемными в многоустройственой среде, вы можете определить препроцессорную константу GDK_MULTIDEVICE_SAFE, используя опцию командной строки -DGTK_MULTIDEVICE_SAFE=1.
Полезные макросы autotools
GTK+ предоставляет различные макросы для удобной проверки версии и поддерживаемых бэкендов. Макросы:
AM_PATH_GTK_3_0([minimum-version], [if-found], [if-not-found], [modules]) | Этот макрос предназначен для проверки того, установлен ли GTK+ и доступен ли для компиляции. Четыре аргумента являются необязательными и представляют: minimum-version, минимально необходимую версию GTK+ для компиляции; if-found, действие, выполняемое, если найдена валидная версия GTK+; if-not-found, действие, выполняемое, если валидная версия GTK+ не найдена; modules, список модулей, которые будут проверяться вместе с GTK+. |
GTK_CHECK_BACKEND([backend-name], [minimum-version], [if-found], [if-not-found]) | Этот макрос должен использоваться для проверки, поддерживается ли конкретный бэкенд GTK+. Аргументы minimum-version, if-found и if-not-found являются необязательными. |
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/gtk-compiling.html