Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2919 / 1046
Регистрация: 01.06.2021
Сообщений: 10,813

Сборка из исходников wxWidgets под Windows, используя MinGW и makefile

01.01.2024, 22:55. Показов 13782. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данной статье приводится инструкция, как собрать из исходников wxWidgets, используя GNU Make на Windows.

0. Для сборки нужен MinGW, в частности mingw32-make. Если он у вас имеется, то переходим к следующему этапу.
Если у вас сложности с установкой MinGW, то советую скачать архив со всем необходимым из сайта winlibs. Там рекомендую выбирать MinGW-w64 (UCRT) + GCC. Разархивируйте архив и укажите абсолютный путь к папке bin в Path.
Для удобства добавляем переменную среды.
Нажимаем Win+R и вводим команду SystemPropertiesAdvanced и далее нажимаем на Переменные окружения
Далее, в переменных системы ищем переменную Path и нажимаем Изменить.
Добавляем папку тулчейна. Например, в моем случае C:\msys64\ucrt64\bin.
В указанной папке должен быть файл mingw32-make.exe. Если нет, то вы неправильно установили тулчейн.

1. Заходим на официальный сайт wxWidgets и нажимает на Downloads
Кликните здесь для просмотра всего текста


2. Скачиваем архив с исходниками (zip или 7z)
Кликните здесь для просмотра всего текста


3. Разархивируем скачанные файлы, например, в корень диска С. Например, после этих действий у вас должна быть папка C:\wxWidgets-3.2.4

4. Переходим в папку C:\wxWidgets-3.2.4\build\msw\. Перед глазами должны быть разные файлы, среди которых makefile.gcc. Если вы его видите, то вы в правильной папке.

5. Кликаете на адресную строку в Проводнике, вводите команду cmd и нажимаете Enter.
Кликните здесь для просмотра всего текста

Открывается командная строка, где выбран уже C:\wxWidgets-3.2.4\build\msw>

6. Далее, нужно прописать команду для сборки с помощью make

Команда состоит из двух частей:

Первая часть указывает на наш makefile:

mingw32-make -f makefile.gcc

Во второй части идут опции, которые нужно передать в зависимости от того, что вам нужно

BUILD=release (если вам нужна релизная сборка)
или
BUILD=debug (если нужна отладочная сборка)

SHARED=1 (говорит о том, что нужно генерировать DLL файлы для динамической линковки)
или
SHARED=0 (выбрана по умолчанию, можно даже не прописывать. Означает, что нужна версия со статической линковкой)

MONOLITHIC=1 (если нужно генерировать одну большую библиотеку вместо отдельных файлов)
Опция MONOLITHIC 1 используются только с SHARED 1

UNICODE=1 (выбрана по умолчанию, можно не прописывать. Означает, что нужно использовать юникод)
или
UNICODE=0 (использует ANSI)

Примечание: при сборке с опциями SHARED=1 MONOLITHIC=1 рекомендую также прописать
CXXFLAGS=-fno-keep-inline-dllexport
чтобы предотвратить нехватку оперативной памяти при сборке

В итоге, если презюмировать, что не отключаем включенный по умолчанию юникод, то возможны такие варианты:
Code
1
2
3
4
5
6
SHARED=0 BUILD=debug
SHARED=0 BUILD=release
SHARED=1 BUILD=debug
SHARED=1 BUILD=release
SHARED=1 MONOLITHIC=1 BUILD=debug
SHARED=1 MONOLITHIC=1 BUILD=release
Т.к. я предпочитаю всегда статическую линковку и мне достаточно релизной сборки, то я прописываю:

mingw32-make -f makefile.gcc SHARED=0 BUILD=release

т.е. в командной строке выглядит так

C:\wxWidgets-3.2.4\build\msw>mingw32-make -f makefile.gcc SHARED=0 BUILD=release
Кликните здесь для просмотра всего текста


Далее нажимаю Enter и сборка начинается.

Процесс занимает много времени, которое зависит от вашего железа.
В конце нужно убедиться, что сборка прошла без ошибок.

***

Потом можно создать папку, например, wxWin куда скопировать из папки C:\wxWidgets-3.2.4 (папка с исходниками) две папки:
C:\wxWidgets-3.2.4\include
C:\wxWidgets-3.2.4\lib\

В итоге, получится
wxWin\include
wxWin\lib

Собственно, папку C:\wxWidgets-3.2.4\ можно потом удалить, если не планируете создать другие сборки.

Дальше в ide указываются папки из wxWin.
Например, если Code::Blocks, то в Settings/Global variables создается переменная wx.
в base указывается абсолютный путь к wxWin
в include указывается абсолютный путь к wxWin\include
в lib указывается абсолютный путь к wxWin\lib

Далее создаете проект wxWidgets
При создании проекта, выбирайте wxWidgets 3.2, а также ставьте или уберите галочки, касающиеся юникода, типа созданной библиотеки и пр., чтобы оно соответствовало опциям, которые вы использовали при сборке.

Дополнительно можно скачать wxFormBuilder, которая облегчит процесс создания форм, либо использовать плагин wxSmith из C::B.
4
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2024, 22:55
Ответы с готовыми решениями:

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

Сборка проекта под mingw в windows
Всегда использовал студию и собирал из под ее командной строки. прописывал qtenv.bat, qmake, nmake. Но тут понадобилась чистая...

Сборка MySQL драйверов под Windows для mingw
При выполнении C:\Qt\Qt5.1.0\5.1.0-beta1\Src\qtbase\configure.exe Выдает ошибку: Error: Creating a shadow build of Qt requires ...

2
Just Do It!
 Аватар для XLAT
4211 / 2668 / 655
Регистрация: 23.09.2014
Сообщений: 9,082
Записей в блоге: 3
20.01.2025, 09:00
Royal_X, всё прошло гладко - без сучка и запинки...

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
Для удобства добавляем переменную среды.
нет тут никакого удобства в моем случае - у меня зоопарк компиляторов.
удобство это изготовить одну кнопку в виде батника с path внутри и по ней клацать)



спасибо за манула)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6221 / 2919 / 1046
Регистрация: 01.06.2021
Сообщений: 10,813
10.01.2026, 12:16  [ТС]
Update

Начиная с wxWidgets 2.9.1 при сборке даже релизной версии wxDEBUG_LEVEL выставлен на 1, что включает некоторые ассерты, хотя и не все (как это происходит при значении 2).

Такое поведение, как по мне, не совсем корректное. Человек при сборке с флагом BUILD=release видит, что данный флаг также подключает NDEBUG и полагает, что его релизная библиотека будет без ассертов, но в итоге оказывается, что это не так. NDEBUG отключает только ассерты С++, но не wxWidgets. Далее, все программы, скомпилированные на релизной библиотеки будут иметь больше размера и содержать ненужный отладочный мусор, даже если при сборке передать NDEBUG. Этот мусор заметно увеличивает размер бинарника.
Передача wxDEBUG_LEVEL=0 при сборке проектов может убрать эти отладочные данные из бинарников, но не полностью, поэтому предлагаю решить эту проблему еще при сборке самой библиотеки wxWidgets.

Перед сборкой библиотеки, предлагаю отредактировать файл include/msw/setup.h.
Там уже есть закомментированные строки

C++
1
2
3
4
5
6
7
8
9
10
11
// wxDEBUG_LEVEL will be defined as 1 in wx/debug.h so normally there is no
// need to define it here. You may do it for two reasons: either completely
// disable/compile out the asserts in release version (then do it inside #ifdef
// NDEBUG) or, on the contrary, enable more asserts, including the usually
// disabled ones, in the debug build (then do it inside #ifndef NDEBUG)
//
// #ifdef NDEBUG
//  #define wxDEBUG_LEVEL 0
// #else
//  #define wxDEBUG_LEVEL 2
// #endif
Тут они предлагают связать с NDEBUG, типа если юзер выставил данный флаг, то чтобы wxDEBUG_LEVEL принял значение 0 и отладочные данные не включались, а мол если нет данного флага, то чтобы этих данных наоборот было больше обычного.
Такая логика и вправду хороша, если вы собираете и релизную и отладочную версии wxWidgets.
Однако, если вы собираете только релизную библиотеку и отладочная версия вам вообще не нужна, то предлагаю раскомментировать только строку
C++
1
#define wxDEBUG_LEVEL 0
Лезть в wx/debug.h не нужно. Дефайны в setup.h приоритетнее. К тому же, полагается, что юзер имеет право редактировать только setup.h и данный файлик вообще-то для этого и был создан разрабами библиотеки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2026, 12:16
Помогаю со студенческими работами здесь

Как из исходников собрать exe в Windows с Mingw?
Пробовал с mingw491_32. Вот эту программу Sip-4.17 https://sourceforge.net/projects/pyqt/files/sip/sip-4.17/sip-4.17.zip/download ...

QElectroTech сборка из исходников под виндоус
Всем привет) вопрос кто нибудь собирал QElectroTech под виндоус?Скачала исходники, выдает только одну ошибку.. No rule to make target...

PHP 5.5 — сборка из исходников под nginx
Доброго времени суток! Вопрос следующий - как правильно собрать PHP5 из исходников под nginx (php-fpm), без использования абсолютных...

Сборка Box2D под MinGW
Как собрать из исходников файл Box2D.dll под MinGW, чтобы можно было в свои проекты подключать?

Сборка Qt 4.8.5 под MinGW, неизвестная ошибка
Собираю под Windows 7 qt-everywhere-opensource-src-4.8.5, скачал с архива на downloads.qt.io, во время исполнения confiigure: set...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru