Pull to refresh

wxWidgets + Codelite. Быстрый старт

Библиотека для разработки GUI приложений wxWidgets продолжает развиваться и на сегодняшний день (лето 2020) уже доступна версия 3.1.3. Библиотека помогает создавать кроссплатформенные приложения, при этом максимально используя родные графические элементы операционной системы. Другой на мой взгляд важной особенностью библиотеки является то, что на текущий момент ее лицензия позволяет также создавать закрытые коммерческие приложения. В третьих — доступны исходные коды библиотеки. Более того, библиотека прекрасно интегрируется в Codelite — open-source кроссплатформенной средой разработки.

Как это зачастую бывает у некоммерческих проектов — для «непродвинутых» пользователей установка и настройка рабочей среды для разработки приложений на wxWidgets — нетривиальная задача. Помню времена Delphi 2007 — когда запустил инсталятор и через пару минут уже начал рисовать форму с кнопочками. Пару часов и программа для расчета КПД по измеренным вольт-амперным характеристикам солнечного элемента готова. С wxWidgets первый раз было все сложнее. Благодаря долгому чтению разрозненных мануалов и инструкций, в т.ч. на хабре мне как-то удалось один раз установить и настроить библиотеку. Однако полного понимания сути происходящих процессов я так не получил. И в очередной раз устанавливая новую версию библиотеки пришлось снова потратить немало времени, чтобы разобраться в вопросе. Данная заметка надеюсь добавит немного большего понимания того как происходит установка и что там внутри для тех, кто как и я, решились окунуться в мир программирования GUI-приложений на основе wxWidgets. В отличие от большинства инструкций здесь обойдемся без компиляции исходных кодов библиотеки.

Исходные данные:
Компьютер под управлением 64 битной Windows 7, 8 или 10 и как всегда нехватка времени.

С Visual Studio у меня с самого начала не задалось, после компактной и быстрой Delphi 2007 хотелось чего-то похожего, но под c++ разработку. Codelite стала для меня той самой компактной и быстрой IDE. Размер инсталятора для Codelite 14 занимает всего 33 МБ.

Итак, скачиваем установочный файл Codelite Stable 64 бит с сайта. Его установка не вызывает трудностей. После установки пока не запускайте программу. Она попытается выполнить поиск установленных компиляторов, а их может там и не быть. Поэтому вторым шагом мы будем ставить компилятор.

Под понятием «компилятор» в широком смысле скрывается набор программ для компиляции. Это и сам компилятор и линковщик и еще куча вспомогательных утилит. Есть платные и бесплатные компиляторы. С закрытым и открытым кодом. Допускающие создавать коммерческие проекты или нет.

Так как у нас как всегда не хватает времени, то устанавливать библиотеку wxWidgets будем уже в скомпилированном виде (в виде бинарных файлов). Да, после долгих экспериментов с компиляцией из исходных файлов, где обнаружилась уйма ньюансов в зависимости от версии библиотеки и компилятора решил на время оставить это дело. Разработчики библиотеки предлагают скачать бинарные файлы для нескольких компиляторов: под Visual Studio и Mingw различных версий. Например, выбираем свежий релиз wxWidgets для разработчиков 3.1.3. Он доступен в виде бинарников для компилятора (сборки) MinGW-w64 8.1. Запоминаем название и идем на сайт данной сборки: mingw-w64.org. В разделе «Загрузки» будет таблица с названием «Pre-built toolchains and packages» где находим в первом столбце «MingW-W64-builds». Скачиваем, запускаем. Откроется инсталлятор, где будет предложено выбрать версию компилятора и несколько опций. Выбираем тот, что запомнили ранее — версию 8.1, x86_64, остальные поля без изменений.

image

Путь можно указать например C:\mingw-w64. Инсталлятор загрузит и установит выбранный компилятор. В итоге по адресу C:\mingw-w64\mingw64\bin будут находится exe файлы компилятора. Позже добавим этот путь к системной переменной path

Далее осталось загрузить и установить библиотеку wxWidgets. Для этого переходим на сайт wxwidgets.org в раздел «Загрузки» и выбираем бинарную сборку под наш уже установленный компилятор (MinGW-w64 8.1).

image

Номер версии имеет значение и должен соответствовать версии компилятора. Сайт предложит скачать на выбор: архив с заголовочными файлами, Development Files и Release DLLs под 32 или 64 версию. Прежде чем скачивать хочу рассказать про ньюанс с работой wxWidgets. Так выглядит опция для с++ компилятора в настройках проекта по-умолчанию с использованием wxWidgets в Codelite IDE под Windows:

-O2;-Wall;$(shell wx-config --cxxflags --unicode=yes --debug=no) 

Как видим — никаких путей до библиотеки и ее заголовочных файлов. Пути и директивы компилятору будут отправлены после выполнения команды $(...) в оболочке. Забегая вперед — на настроенной системе результат выполнения команды будет примерно такой:

-mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wx/lib/gcc_dll/mswu -IC:/wx/include -Wno-ctor-dtor-privacy -pipe -fmessage-length=0

Чтобы вся эта конфигурация с wx-config заработала нужно проделать следующее:
1) С того же раздела «Загрузки» скачиваем исходные коды библиотеки wxWidgets (Windows Installer). Запускаем инсталятор и указываем каталог для установки C:\wx. Ничего компилировать мы не будем. Зато получим заголовочные файлы, структуру каталогов, примеры и если что, можем подсмотреть в исходных файлах реализации функций.

2) Скачиваем также файл «Development Files» в разделе wxWidgets binaries для 64 битной версии нашего компилятора (MingGW-w64 8.1). Распаковаваем содержимое в C:\wx\lib\ попутно переименовав каталог gcc810_x64_dll в gcc_dll. В итоге путь до файлов должен получиться C:\wx\lib\gcc_dll\ В этом каталоге будут файлы с расширением *.a и *.dll, а также два каталога: mswu и mswud.

Последний штрих. Добавляем системные переменные.

В переменную path в конец добавим:

C:\mingw-w64\mingw64\bin
C:\wx\lib\gcc_dll

image

А в переменные среды для текущего пользователя:

WXWIN равную C:\wx
WXCFG равную gcc_dll\mswu

image

После добавления переменных обязательно нужно выйти из системы либо перезагрузить компьютер.

Теперь все готово чтобы в первый раз запустить Codelite. Программа предложит выбрать «Стиль кодирования». Выбираем профиль «C/C++ Development». Далее предложит просканировать компьютер на наличие установленных компиляторов. Жмем на Scan и выбираем наш установленный ранее MinGW. Далее можно выбрать цветовую тему и как осуществлять отступы (пробелом или табом). Программа сама перезапустится для применения изменений.
Далее создаем новый Workspace C++ и указываем для него путь. Создаем новый проект путем нажатия на имени Workspace в навигационной панели правой клавишей мыши New->New Project

image

В окне настроект проекта выбираем поля как на рисунке. Жмем OK. Далее полностью ракрываем дерево проекта в левой части экрана и двойным щелчком открываем файл main.cpp. Родной пример для меня, как новичка, был сложен для понимания, поэтому прикладываю свою заготовку файла main.cpp:

Заголовок спойлера
#include <wx/wx.h>
#include <wx/msgdlg.h>

class MyApp : public wxApp
{
public:
    virtual bool OnInit(); 
};

class MainFrame : public wxFrame  
{
public:
    MainFrame(const wxString &title);
private:
    wxPanel *pnl;
    wxButton *btn1, *btn2;
    wxBoxSizer *mainSizer;
    
    void OnPressBTN1(wxCommandEvent& WXUNUSED(event));    
};

bool MyApp::OnInit()
{
    MainFrame *frame = new MainFrame(_("Hello World!")); 
    return true;
}

IMPLEMENT_APP(MyApp) 

MainFrame::MainFrame(const wxString &title):wxFrame(NULL, wxID_ANY, title)
{
    SetMinSize(wxSize(200, 200));
    Centre();
    
    pnl = new wxPanel(this, wxID_ANY);
    
    btn1 = new wxButton(pnl, wxID_ANY, "LEFT");
    btn2 = new wxButton(pnl, wxID_ANY, "RIGHT");
    
    btn1->Bind (wxEVT_COMMAND_BUTTON_CLICKED, &MainFrame::OnPressBTN1, this);
    
    mainSizer = new wxBoxSizer(wxHORIZONTAL);
    mainSizer->Add(btn1, 1, wxEXPAND, 0);
    mainSizer->Add(btn2, 1, wxEXPAND, 0);
    pnl->SetSizer(mainSizer);
    
    Show();
}

void MainFrame::OnPressBTN1(wxCommandEvent& WXUNUSED(event))
{
    wxMessageBox( wxT("Hello World!") );    
}


Комбинацией CTRL+F5 компилируем, собираем и запускаем проект.

image

Получившийся exe файл имеет следующие зависимости:

image

Для того, чтобы он запустился на другом компьютере необходимо к нему в тот же каталог добавить несколько dll. В данном примере это пара библиотек wxWidgets и компилятора minGW:

c:\wx\lib\gcc_dll\
wxbase313u_gcc810_x64.dll
wxmsw313u_core_gcc810_x64.dll

c:\mingw-w64\mingw64\bin\ 
libgcc_s_seh-1.dll
libstdc++-6.dll
libwinpthread-1.dll 

Для более серьезных проектов понадобится использовать больше зависимостей, поэтому стоит скачать с сайта wxWidgets помимо Development Files еще и Release DLLs под свой компилятор.

Все. Надеюсь быстрый старт получился действительно быстрым. У данного способа есть недостаток — данные бинарные файлы WxWidgets рассчитаны на динамическую линковку с приложением, поэтому создать монолитный exe файл, запускающийся на других компьютерах таким способом не получится. По крайней мере мне не удалось.

Удачи! И до новых встреч!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.