понедельник, 6 мая 2013 г.

Gtk+. Минимальный проект


Для создания минимального проекта используется среда программирования Geany 1.2.3, под управлением Fedora 18 Linux и KDE 4.10.2.

1. Подготовка среды Geany

Чтобы приступить к написанию кода нам необходимо настроить среду Geany на компиляцию и сборку проекта. Наш проект это один файл main.c. Настройку среды начнем с знакомства с программой pkg-config. Например, если мы хотим скомпилировать GTK+ приложение, мы должны показать компилятору, где искать GTK+ заголовочные файлы и библиотеки, то на помощь к нам придет программа pkg-config. Откройте терминал Konsole и введите следующие две команды:

1) Первая команда отобразит все GTK+ заголовочные файлы
> pkg-config --cflags gtk+-3.0

Результат выполнения:
-pthread -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng15 -I/usr/include/libdrm

2) Вторая команда отобразить все GTK+ библиотеки
> pkg-config --libs gtk+-3.0

Результат выполнения:
-lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0

Следующим шагом будет создание файла main.c. Откройте среду Geany и выберите пункт меню File > New, этим действием мы создадим безымянный файл проекта. Сохраните файл проекта под именем main.c, для этого выберите пункт меню File > Save As.

Теперь в настройках проекта мы пропишем необходимые команды компиляции и сборки. Выберите пункт меню Build > Set Build Commands, откроется окно установки команд компиляции и сборки (смотрите рисунок 1). В поле с именем Compile нужно написать следующую команду:

gcc `pkg-config --cflags gtk+-3.0` -c "%f"

где %f , это параметр, вместо которого среда Geany подставит имя нашего файла main.c, gcc, это название компилятора который скомпилирует наш файл. Опция -c, это опция говорит компилятору, что файл нужно только скомпилировать. Последнее, это pkg-config --cflags gtk+-3.0, заголовочные файлы библиотеки GTK+. На этом этапе мы будем получать только объектный файл, в нашем случае main.o. Об опциях компилятора gcc читаем на сайте Opennet.ru. О параметрах среды Geany читаем на сайте Geany.org.

В поле с именем Build нужно написать следующую команду:

gcc `pkg-config --cflags --libs gtk+-3.0` -o "%e" "%f"

Выше указаная строчка сборки проекта не работает у меня Ubuntu 15.04 и Geany 1.24.1 и поэтому вы должны получить ряд сообщение при сборки проекта:

undefined reference to `gtk_init'  
undefined reference to `gtk_window_new'  
undefined reference to `gtk_main_quit'  
undefined reference to `g_signal_connect_data' 
undefined reference to `gtk_widget_show' 
undefined reference to `gtk_main'

так что ее нужно заменить на

gcc "%f" `pkg-config --cflags --libs gtk+-3.0` -o "%e" 

указав исходный файл проекта перед указанием необходимых библиотек для сборки проекта (ссылка по теме: http://stackoverflow.com/questions/11546877/compiling-and-linking-gtk-3-with-c-project-on-ubuntu).

где %f, параметр среды Geany, который мы разобрали выше по тексту, %e, тоже подстановка в командном пути, среда Geany подставит имя файла без пути и расширения, то есть подставится main. Опция -o, говорит компилятору, что весь вывод нужно поместить в файл main. Последнее, это pkg-config --cflags --libs gtk+-3.0, подстановка заголовочных файлов и библиотек GTK+. На этом этапе мы получим исполняемый файл GTK+ приложения.

Рисунок 1. Установка команд компиляции и сборки в среде Geany


Дополнение к посту:

Если pkg-config сообщает, что пакет gtk+-3.0 не найден, то нам необходимо установить пакет для разработчика, который называется gtk3-devel для Fedora 20. В Ubuntu 15.04 пакет называется libgtk-3-dev.

Если выдается сообщение, что gcc не найден, то нам необходимо его установить при помощи программы Apper.


Так, теперь окно, установки параметров сборки проекта в среде Geany, можно закрыть. Переходим к написанию кода.

2. Написание кода GTK+ приложения

В файле main.c, который мы создали и сохранили, нам необходимо написать следующие:

#include <gtk/gtk.h>

int main(int argc, char **argv) {

 GtkWidget *window = NULL;
 
 gtk_init(&argc, &argv);
 
 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
 g_signal_connect(window, 
                  "destroy",
                  G_CALLBACK(gtk_main_quit),
                  NULL);
 gtk_widget_show(window);
 
 gtk_main();
 
 return 0;
 
}


syntax highlighted by Code2HTML, v. 0.9.1


1) Строчкой #include <gtk/gtk.h> мы подключаем заголовочный файл библиотеки GTK+.
2) Строчкой int main(int argc, char **argv) { } главная функция, где { }- открывающая и закрывающая фигурные скобки главной функции программы.
3) Внутри главной функции программы, строчкой GtkWidget *window = NULL, мы определили будущий указатель на GTK объект, которой будет являться главным окном программы. Все GTK объекты, будь то окно или кнопка (другими словами «виджеты») , должны быть определены как указатель на базовый класс GtkWidget.
4) Строчкой gtk_init(&argc, &argv), мы инициализируем GTK+.
5) Строчкой window = gtk_window_new(GTK_WINDOW_TOPLEVEL), мы выделяем память под GTK объект, в нашем случае обычное окно (тип окна: GTK_WINDOW_TOPLEVEL).
6) Строчка g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL), когда окно уничтожается, например по нажатию на кнопку закрытия окна, то вызывается функция gtk_main_quit, которая прервет главный цикл обработки сообщений начатый функцией gtk_main
7) Строчкой gtk_widget_show(window), мы покажем наше окно.
8) Строчкой gtk_main(), мы передаем управление над программой библиотеке GTK.

Теперь нам осталось только построить проект. Для этого выберите пункт меню Build > Build или нажмите клавишу F9.

Ниже, на рисунке 2, можно посмотреть результат нашей работы.
Рисунок 2. Минимальное GTK+ приложение
 

Комментариев нет:

Отправить комментарий