воскресенье, 23 января 2011 г.

Компиляция приложения gtk в среде windows 7

Если у нас есть программа, написанная с использованием gtk, то она может работать и на юникс-системах и на windows. Ее исходники не надо переписывать отдельно для каждой платформы. Просто этот исходник надо откомпилировать на целевой платформе. Здесь мы и рассмотрим как это делается для windows.
Для того чтобы компилировать исходники gtk программы в среде windows нам необходимо проинсталлировать в windows такие пакеты: GTK+, MinGW, MSYS. Дадим очень краткое определение этим трем пакетам. GTK+ - это набор инструментариев для создания графического интерфейса. MinGW - минимальная среда разработки GNU для windows. MSYS - юниксоподобная командная оболочка для windows.
Начинаем.
Идем сначала на сайт www.gtk.org находим раздел загрузки GTK+ для windows и выкачиваем all-in-one bundles (переводится "все в одной связке", а вообще можно по отдельным компонентам выкачивать, но это не для нашего случая).
Затем идем на www.mingw.org и выкачиваем пакет MinGW. В нем содержатся компилятор gcc и GNU binutils (ассемблер, редактор связей, менеджер архивов) для windows.
Ссылка для загрузки перебросит нас на sourceforge.net. Там, я так понял тоже можно почастям этот пакет устанавливать, но мы возьмем установщик MinGW через сеть: Download mingw-get-inst-xxxxx.exe.
"Визуализирую" шаги инсталлирования:



Далее принимаем лицензионное соглашение. И указываем путь, по которому устанавливаем MinGW. Принимаем установку по умолчанию: C:\MinGW. Хотя я бы предпочел другой путь - в "Programm Files". Мне кажется, что так логичней. Оставим это как "домашнее задание". Далее вас спросят какой из предоставляемых компиляторов вы хотите видеть в своей системе (я выбрал компилятор си и фортрана), а также предоставят выбор ставить или не ставить MSYS Basic System, MinGW Developer Toolkit и MSYS System Builder. Я выбрал для установки все три, но это (в моем случае) не избавило меня устанавливать MSYS отдельно.


Изменяем системную переменную Path. Добавляем в конец строки значения переменной: C:\MinGW\bin\;
MinGW установлен. Теперь займемся MSYS. Идем на www.mingw.org/wiki/MSYS и выкачаем его инсталлятор. Запустим на выполнение:

Читаем лицензию и другую полезную информацию (ну жмем постоянно кнопку next). Далее выбираем путь, по которому будет устанавливаться MSYS. В нашем случае это: C:\MinGW\msys\1.0. Эта директория существует. И вас спросят, перезаписать ли ее. Отвечаем утвердительно. Далее будет задано несколько вопросов из консоли, то есть вам надо будет нажимать "y", а не NEXT.


На этом с MSYS покончено. Теперь мы можем вызывать командную оболочку MinGW из меню windows и со всеми юниксовыми особенностями и удобствами в ней работать.

Займемся теперь вплотную GTK:
Так же необходимо изменить переменную Path. Добавляем к строке, определяющей эту переменную следующее: C:\GTK\bin\;. Далее просто распаковываем содержимое "all-in-one bundles" в директорию C:\GTK. Тест на то, все ли в порядке, прост. Запускаем MinGW shell и из него смотрим, видит ли команда pkg-config библиотеки и заголовочные файлы GTK:

Также из оболочки можно запустить, входящую в комплект поставки этого "bundle" приложение gtk-demo. С помощью его можно изучать как писать GTK программы:

Теперь создадим файл demo-gtk.c следующего содержания:

#include <gtk/gtk.h>

static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
g_print ("delete event occurred\n");
return FALSE;
}

static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}

int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *label;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete-event", G_CALLBACK (delete_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_show (window);

label=gtk_label_new("HELLO!");
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);

gtk_main ();

return 0;
}

и компилируем командой из MinGW shell, запускаем на выполнение и видим результат:

Файл находится и команда компиляции запускается с директории, которая в терминах windows находится (в нашем случае) по пути C:\MinGW\msys\1.0\home\user, где user - это наша учетная запись в windows.
Для короткого введения в данную тему - все.

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