Главная :: Программы для программирования :: wxWidgets :: wxWidgets под ОС GNU/Linux
Программиста спрашивают: Скажите пожалуиста, который час? Программист: Который час, если вас это прикалывает девушка.

wxWidgets под ОС GNU/Linux

Перед установкой 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)
{
}

Ссылки

Автор статьи: Ильдар Насибуллаев