Перед установкой wxWidgets под GNU/Linux следует проверить, что в системе есть необходимые для библиотеки пакеты: GTK+ и gcc. Первый пакет устанавливается в соответствующей секции yast: Шаблоны ← GNOME Development ← gtk2-devel.
Распаковываем архив в папку ~/src/wxGTK-2.8.9. Далее запускается консоль и выполняются следующие команды:
cd ~/src/wxGTK-2.8.9 su- вводим пароль суперпользователя mkdir release - в этой папке создаем release-версию cd release Конфигурация: уникод+релиз+статическая, монолитная библиотека ../configure --enable-unicode --disable-debug --disable-shared --enable-monolithic Собираем make Устанавливаем для всех пользователей make install Обновляем динамические библиотеки ldconfig
В данном примере мы создаем отдельную сборку для release-версии программы. Отметим, что команду ldconfig необходимо запускать при сборки динамической версии библиотеки. В примере собирается статическая версия и запуск команды можно пропустить (хотя от ее запуска хуже не будет - по крайней мере, не забудете ее запустить, когда она будет нужна). Из приведенных здесь команд только одна требует прав суперпользователя - make install, поэтому в начале можно не запускать команду su и последнюю команду запустить как sudo make install. Для удаления сборки используйте команду make clean (запускается из каталога сборки). Для удаления используйте команду make uninstall.
Можно делать столько сборок библиотек с различными параметрами, сколько вам нужно. Основные параметры следующие:
Полный список опций вы можете получить по команде wx-config --help.
Приведем команды для сборки отладочной конфигурации в папке debug (первая команда - это выход из папки с релиз-конфигурацией):
cd .. mkdir debug cd debug ../configure --enable-unicode --enable-debug --disable-shared --enable-monolithic make make install ldconfig
Установка завершена. Можно перейти в каталог с примерами cd ../samples/minimal и собрать и запустить пример make и ./minimal. Если все собралось удачно, то вы увидите простое графическое приложение.
Напишем несколько скриптов, которые облегчат вам работу с wxWidgets. Скрипты мы поместим в каталог ~/bin (для перехода, набираем в консоли cd ~/bin). Если каталога нет, то создаем его cd ~ && mkdir bin.
В этом каталоге создадим следующие скрипты (первая команда, создание через vi, но можно создавать файлы и в любом другом редакторе).
vi wxdebug #/usr/bin/sch g++ $1.cpp `wx-config --debug --libs --cxxflags` -o $1
vi wxrelease #/usr/bin/sch g++ $1.cpp `wx-config --libs --cxxflags` -o $1 strip $1 upx -9 $1
Мы создали два скрипта для сборки собственных проектов под библиотеку wxWidgets (под две конфигурации). Сделаем их исполняемыми chmod +x wxdebug и chmod +x wxrelease. Первая строка (#/usr/bin/sch) - определяет в каком формате записан скрипт (под какой шелл - в примере под C-shell). Вторая строке (g++ ...) - компиляция проекта с правильными опциями компилятора. В релиз версии добавлены строки для отбрасывания лишней информации из исполняемого файла и бинарная упаковка файла. Эти строки нужны, если вы хотите уменьшить размер исполняемого файла (в несколько раз). Возможно, потребуется дополнительная установка пакета upx (входит в практически любой дистрибутив).
Пропишем в переменные окружения путь до папки с нашими скриптами (примеры для Bash-shell и C-shell):
cd ~ vi .bashrc set path=~/bin %path vi .schrc set path=(~/bin $path)
Для тестирования собираем пример (hello.cpp, см. ниже код):
cd ~/progs/hello переходим в папку с программой
wxdebug hello
ll
./hello
wxrelease
ll
./hello
Команда ll приведена лишь для того, чтобы вы могли сравнить размер исполняемого файла, собранного разными конфигурациями.
Сам текст примера:
#include "wx/wx.h" class MyApp: public wxApp { virtual bool OnInit(); }; class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MyFrame *frame = new MyFrame( _T("Привет, мир!"), wxPoint(25,25), wxSize(200,150) ); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { }