Компиляция приложений 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.22/gtk-compiling.html