gremlinable (gremlinable) wrote,
gremlinable
gremlinable

Categories:

Сборка wx_trunk + wxcode

Так как я давно серьёзно не имею дел с wxWidgets, то сборочное окружение, в котором я собираю свои мелкие вспомогательные утилиты до недавнего времени находилось в состоянии "что собралось три года назад, с тем и линкую". А собирал я тогда, надо отметить, рассово-правильным способом, через .configure. Ага, под виндой, в msys... И, в общем-то, проблем особых не возникало с использованием (единственное, недавно нашёл баг в wxPlotCtrl - в апстрим-то я фикс отправил, а вот самому пересобирать было влом, пришлось костыль для его обхода подставлять), неудобства начинались когда надо было собрать софтины на другой машине... В общем, решил я наконец-таки обновить своё сборочное окружение, тем более, что есть повод попробовать кое-какие плюшки новых wx`ов. И всё было бы легко и просто, если бы я не использовал упомянутый выше wxPlotCtrl. Как выяснилось, собираться он (а точнее его составная часть - wxThings) хочет далеко не во всех конфигурациях: я пробовал варианты SHARED=1 MONOLITHIC=1, SHARED=0 MONOLITHIC=1 и SHARED=0 MONOLITHIC=0 - собралось только в последнем. Так вот, делаю шпаргалку по сборке:

Дефайним расположение библиотек и тулзов
set WXWIN=D:\WX_TRUNK
set WXCODE=D:\wxCode
set MINGW=C:\MinGW
set CMAKE=C:\Program Files\CMake
D:


Первая сборка
mkdir %WXWIN%
mkdir %WXCODE%
cd %WXWIN%
svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk .
cd %WXCODE%
svn checkout svn://svn.code.sf.net/p/wxcode/code/trunk/wxCode .

Не забыть поставить компилятор. GCC под винду бывает разный, я обычно использую стандартный MinGW и ставлю его по дефолтовому пути (C:\MinGW). А ещё желательно, что бы в path были доступны библиотеки libgcc_s_dw2-1.dll и libstdc++-6.dll.
Кроме того, надо поставить заголовки для GDI+ - качаем, например, отсюда и распаковываем lib и include в соответствующие подкаталоги MinGW. Подробнее можно почитать, например, тут.
Для сборки wxThings и wxPlotCtrl теперь нужен cmake, плюс, желательно, поставить doxygen. Я ставил и то и другое по дефолтовым путям. Есть небольшая проблемка - текущий cmake (3.0.2) ничего не знает про то, что dev-версия wx-ов сейчас имеет номер 31, по-этому надо обновить файл C:\Program Files\CMake\share\cmake-3.0\Modules\FindwxWidgets.cmake. Можно самостоятельно вписать недостающие циферки, а можно скачать работающую версию из поставки wxLua.

Обновление
cd %WXWIN%
svn update
cd %WXCODE%
svn update

Общая часть
set path=%MINGW%\bin;%MINGW%\mingw32\bin;%CMAKE%\bin
cd %WXWIN%\build\msw
mingw32-make -f makefile.gcc USE_XRC=1 SHARED=0 MONOLITHIC=0 BUILD=release USE_GDIPLUS=0 clean
mingw32-make -f makefile.gcc USE_XRC=1 SHARED=0 MONOLITHIC=0 BUILD=release USE_GDIPLUS=0

cd %WXCODE%\components\wxthings
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=FALSE -DwxWidgets_ROOT_DIR=%WXWIN%
mingw32-make clean
mingw32-make
cd %WXCODE%\components\plotctrl
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=FALSE -DwxWidgets_ROOT_DIR=%WXWIN%
mingw32-make clean
mingw32-make

cd %WXCODE%\components\freechart\build
mingw32-make -f makefile.gcc WX_SHARED=0 WX_UNICODE=1 WX_DEBUG=0 WX_VERSION=31 WX_MONOLITHIC=0 clean
mingw32-make -f makefile.gcc WX_SHARED=0 WX_UNICODE=1 WX_DEBUG=0 WX_VERSION=31 WX_MONOLITHIC=0

Всё, должно работать. Проверить можно запустив пример из %WXCODE%\components\plotctrl\samples\plotctrl. Если при сборке ругается на GDI даже с флагом USE_GDIPLUS=0, значит уже был сгенерён конфиг с включенным GDI, надо его почистить.

UPDATE 23.11.2013: Обновил до соответствия современным реалиям, добавил сборку freechart
UPDATE 16.09.2014: Поправлено для корректной первоначальной сборки на чистой Win7 x32.
UPDATE 23.10.2014: Добавлена сборки wxThings/wxPlotCtrl через cmake.
Tags: windows, wxwidgets, памятка, программерское
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments