From Code::Blocks
A beginner’s quick reference for setting up wxWidgets with Code::Blocks in Windows
Supported compilers: MinGW or MSVC
Chinese Translation
Important Requirements:
- Recent version of Code::Blocks — You need to have successfully installed and run a recent version of Code::Blocks — either the 17.12 release or [/index.php/board,20.0.html a recent nightly build].
- Windows compiler — You need to have correctly installed either
- the MinGW/GCC free compiler (or one of its forks), or
- Microsoft Visual C++ (the Express editions are free, but you must also install the Platform SDK).
When downloading an official Code::Blocks release, you have the option of downloading a bundle package that includes a full MinGW/GCC toolchain.
- Path properly defined — Ensure that the folder containing the compiler executables (typically C:Program FilesCodeBlocksbin, or C:MinGW32bin) is in your Windows PATH environment variable.
Download wxWidgets Source Code
wxWidgets is distributed in source code format, and you need to compile it into a library before you can use it in your own programs.
The current recommended version of wxWidgets to use is 2.8.12. Click here to download the wxWidgets 2.8.12 sources for Windows (wxMSW-2.8.12-Setup.exe; 12.2 MB). You can check the wxWidgets download page to see if a newer stable version is available. It is highly recommended that you install the sources to a path without spaces. You should choose a volume with at least 300 MB of free space.
wxPack is no longer recommended for use, as it is built with a much older version of GCC.
Build wxWidgets
- Open up a command prompt for building. If you are using MinGW/GCC, simply use the standard Windows command shell (open the Start menu, click «Run…», enter «cmd» and hit OK). If you are using MSVC, you should use the special command shell which sets up the correct environment variables for you. If you use a version of MSVC which required you to download the Platform SDK separately, ensure that whichever command environment you use includes the Platform SDK tools and paths as well as the standard compiler tools and paths.
- Change to the wxWidgets build directory (where <wxWidgets> is the path you extracted the sources to; typically C:wxWidgets-2.8.12):
cd /D <wxWidgets>buildmsw
Note: the /D
flag after cd
may be omitted from the command; it simply allows command prompt to change drives if necessary.
- Execute the build command. The recommended command to use for MinGW/GCC is:
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport
- The recommended command to use for MSVC is:
nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1
- This step will generally take a long time; faster PCs may expect 30-minute build times, and slower PCs can take as much as several hours.
- If using more recent versions of GCC, many warnings will occur during the build. This can slow the build process noticeably; you may want to redirect the warnings to a text file by appending «2>errlog.txt» to the build command, or supress them entirely by appending «2>nul».
- If the build is successful, gcc dlls will be placed at ../lib/gcc_dll/wxmsw<version>_gcc_custom.dll
The «CXXFLAGS=-fno-keep-inline-dllexport» option is necessary with recent versions of GCC (not with MSVC), to prevent problems with memory usage when performing the final link step on the monolithic DLL.
See the section below titled «wxWidgets build options explained» for details on the meaning of the BUILD, SHARED, MONOLITHIC, and UNICODE options. These options are critically important, because they define the basic wxWidgets development environment you will be using. You must duplicate them exactly when running Code::Blocks’ wxWidgets project wizard.
Create a wxWidgets project in Code::Blocks
- On the Code::Blocks Start Page, select «Create a new project»; alternatively, open the File menu, highlight «New» and select «Project…»
- Select «wxWidgets project»
- The first page is an introduction, which you can choose to skip in the future.
- Select which version of wxWidgets you will be using. If you followed the instructions above, you should select «wxWidgets 2.8.x».
- Set your project title and location.
- Enter author details if you wish (not required).
- At this point wiki member WardXmodem’s gives a «select your GUI options» — can someone detail their meanings?
- Select options for automatic code and file generation.
- Select wxWidgets’ location. It’s highly recommended that you use a global variable for this: enter «$(#wx)» (without quotes). If you haven’t already defined this global variable, the global variables dialog will appear; for the base path, select your wxWidgets installation location. You don’t need to fill in the other paths.
- Select debug and/or release configurations for your project. The debug configuration at least is recommended.
- Choose your wxWidgets build options. These must match the options used when you built wxWidgets! If you followed the directions above, select all three of the options under «wxWidgets Library Settings». The other settings on this page are not related to the wxWidgets build options; you may use them or not as you prefer. In order to avoid using a debug wxWidgets build (as recommended), you must select «Configure Advanced options» and then leave «Use __WXDEBUG__ and Debug wxWidgets lib» unchecked on the next page.
- Select additional libraries if required. You should not need to select any of these for normal usage.
Build and Run
Select «Build and run» (F9) to, well, build and run. If all goes well, your wxWidgets basic program should appear.
wxWidgets Build Options Explained
What do the BUILD, SHARED, MONOLITHIC, and UNICODE options mean?
BUILD
BUILD controls whether a debug version (BUILD=debug) or release version (BUILD=release) of wxWidgets itself is built. In the vast majority of cases you will only need a release version of wxWidgets, since you won’t be interesting in debugging wxWidgets itself. You can still create debug builds of your own programs that link to a release build of wxWidgets.
- A debug build of wxWidgets creates libraries with a «d» suffix — for example, «libwxmsw28d.a»/»wxmsw28d_gcc_custom.dll».
- A debug build of wxWidgets creates the folder «mswd» or «mswud» in the wxWidgets library output folder.
- A release build of wxWidgets creates libraries without the «d» suffix — for example, «libwxmsw28.a»/»wxmsw28_gcc_custom.dll».
- A release build of wxWidgets creates the folder «msw» or «mswu» in the wxWidgets library output folder.
SHARED
SHARED controls whether a DLL (SHARED=1) or static (SHARED=0) version of wxWidgets is built. With a DLL build, compile times are faster and the executable size is smaller. The total size of a single executable plus the wxWidgets DLL is greater, but multiple executables can use the same DLL.
- A DLL build of wxWidgets creates import libraries (such as libwxmsw28.a) and DLLs (such as wxmsw28_gcc_custom.dll). You must include the DLL when you distribute your program.
- A static build of wxWidgets creates static libraries only (such as libwxmsw28.a), and you do not need to distribute a wxWidgets DLL.
MONOLITHIC
MONOLITHIC controls whether a single library (MONOLITHIC=1) or multiple component libraries (MONOLITHIC=0) are built. With a monolithic build, project setup and development are much easier, and you only have one DLL to distribute if you’re using a DLL build. With a non-monolithic (multilib) build, several different libraries are built and you can avoid linking with the entire wxWidgets codebase for programs that don’t need it. You do have to ensure that you choose the correct component libraries.
- A monolithic build of wxWidgets creates a single wxWidgets import library (such as libwxmsw28u.a) and a single DLL (such as wxmsw28_gcc_custom.dll).
- A multilib build of wxWidgets creates multiple import libraries (libwxbase28u.a, etc.) and multiple DLLs.
- Additional static libraries are always created with any wxWidgets build (libwxexpat.a, libwxjpeg.a, etc.). These libraries do not normally need to be used with DLL builds of wxWidgets, but they are required when using static builds.
UNICODE
UNICODE controls whether wxWidgets and your program use wide-character strings with Unicode support. Most programs for Windows 2000 and later should do so. Earlier versions of Windows don’t have the necessary Unicode support. You should always use wxWidget’s _(«string») and _T(«string») macros to ensure that your hardcoded strings are the correct type.
- A Unicode (UNICODE=1) build of wxWidgets creates libraries with a «u» suffix — for example, «libwxmsw28u.a»/»wxmsw28u_gcc_custom.dll».
- A Unicode build of wxWidgets creates the folder «mswu» or «mswud» in the wxWidgets library output folder.
- An ANSI (UNICODE=0) build of wxWidgets creates libraries without the «u» suffix — for example, «libwxmsw28.a»/»wxmsw28_gcc_custom.dll».
- An ANSI build of wxWidgets creates the folder «msw» or «mswd» in the wxWidgets library output folder.
Frequently Asked Questions
I get errors like «wx/setup.h: No such file or directory»
You’re missing an important compiler search path in your build options. Make sure you choose the correct wxWidgets build configuration when running the wxWidgets project wizard. If re-running the wizard isn’t an option, then open your project’s build options and add «$(#wx.lib)gcc_dllmswu» (assuming a monolithic Unicode DLL build) or «$(#wx.lib)gcc_libmswu» (assuming a multilib Unicode build)to the compiler search paths.
I get errors like «cannot find -lwxmsw28u»
You have an incorrect link library in your build options. Make sure you choose the correct wxWidgets build configuration when running the wxWidgets project wizard. If re-running the wizard isn’t an option, determine which version of the library is built and adjust the library name in your build options accordingly.
I get errors like «undefined reference to _Unwind_*»
wxWidgets was built with a different version of GCC than the one you’re currently using. You need to rebuild wxWidgets with the same version of GCC that you use to compile your program.
See also
Forum thread — [/index.php?topic=5359.0 Newbie problem in setting up wxwidgets and Codeblocks]
Краткий справочник новичка по настройке wxWidgets с Code::Blocks в Windows [1]
Поддерживаемые компиляторы: MinGW или MSVC
Важные требования:
- Последняя версия Code::Blocks — необходимо успешно установить и запустить последнюю версию Code::Blocks отсюда: cтраница загрузки Code::Blocks
- Компилятор для Windows — необходимо правильно установить либо
- MinGW/GCC — бесплатный компилятор, или
- Microsoft Visual C++ Express бесплатно, но также требуется установка Windows SDK.
При загрузке официального релиза Code::Blocks, есть возможность загрузки пакета, который включает в себя полный набор инструментов MinGW/GCC.
- Путь к файлам надлежащим образом определен — Убедитесь, что папка, содержащая исполняемые файлы компилятора (обычно C:Program FilesCodeBlocksbin, или C:MinGW32bin) добавлена в вашу переменную среды Windows PATH.
Загрузка исходного кода wxWidgets[править]
wxWidgets распространяется в виде исходного кода, и необходимо скомпилировать его в библиотеку, прежде чем станет возможным использовать его в своих собственных программах.
Рекомендованная к использованию версия wxWidgets 2.8.12. Нажмите сюда, чтобы скачать исходные коды wxWidgets 2.8.12 для Windows (wxMSW-2.8.12-Setup.exe; 12.2 MB). Можно также зайти на страницу загрузки wxWidgets чтобы проверить доступность новой стабильной версии. Настоятельно рекомендуется установить исходные коды wxWidgets с путем без пробелов. Требуется выбор тома (диска) с минимум 300 МБ свободного пространства.
Сборка wxWidgets[править]
- Откройте окно командной строки для сборки. Если вы используете MinGW/GCC, проще будет воспользоваться стандартной командной оболочкой Windows (откройте меню «Пуск», нажмите кнопку «Выполнить…», введите «cmd» и нажмите OK). Если в меню «Пуск» нет кнопки «Выполнить…», то ее можно отобразить нажав правой кнопкой мыши кнопку «Пуск», далее выбираем пункт «Свойства», далее вкладка «Меню Пуск», кнопка «Настроить», поставить флажок у «Команда Выполнить», нажать кнопку «ОК». Если вы используете MSVC, следует использовать специальную командную оболочку, которая устанавливает правильные переменные среды. (Поищите в меню запуска Visual Studio пункт «Visual Studio 20XX Command Prompt» — это ярлык запуск оболочки с установленными переменными среды). Если вы используете версию MSVC, в которой необходимо скачать Platform SDK отдельно, убедитесь, что командная среда включает инструмент Platform SDK и пути к нему, а также стандартный компилятор с путями.
- Перейдите в каталог сборки wxWidgets (<wxWidgets> в тексте далее — реальный путь распаковки его исходных кодов, например C:wxWidgets-2.8.12):
cd /D <wxWidgets>buildmsw
Примечание: /D
флаг после cd
может быть опущен из команды; просто это позволяет командной строке при необходимости изменить диски.
- Выполните команду сборки. Рекомендованная команда для MinGW/GCC:
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport
- Рекомендованная команда для MSVC:
nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1
- Этот этап может занять длительное время ; сборка длится порядка 30 минут на быстрых компьютерах, а на медленных может занимать несколько часов.
- Если используются более поздние версии GCC, во время сборки будет отображаться множество предупреждений. Это обстоятельство может заметно замедлить процесс сборки; можно перенаправить предупреждения в текстовый файл, добавив в команду сборки «2>errlog.txt» или подавить их полностью путем добавления «2>nul».
С последними версиями GCC (не с MSVC) необходим параметр «CXXFLAGS =-fno-keep-inline-dllexport» для предотвращения проблем с использованием памяти при выполнении финального шага сборки в монолитную DLL.
В разделе ниже под названием «Пояснение по опциям сборки wxWidgets» объясняется подробная информация о значении различных вариантов сборки: BUILD, SHARED, MONOLITHIC и UNICODE. Эти опции имеют критически важное значение, поскольку они определяют основу среды разработки wxWidgets используемой в дальнейшем. А именно, требуется дублировать их при запуске мастера создания проекта Code::Blocks’ wxWidgets.
Создание проекта wxWidgets в Code::Blocks[править]
- В стартовой странице Code::Block выберите «Create a new project»; или, откройте меню «File», выберите «New» и нажмите «Project…»
- Выберите «wxWidgets project»
- Первая страница — это вступление, которое можно пропустить в будущем.
- Выберите версию wxWidgets которая нужна для работы. Если вы придерживались инструкции выше, нужно выбрать «wxWidgets 2.8.x».
- Задайте название и расположение проекта.
- Введите данные автора (не обязательно).
- Выберите опции автоматической генерации кода и файлов проекта.
- Выберите расположение wxWidgets. Крайне рекомендуется использовать глобальную переменную, для этого введите «$(#wx)» (без кавычек). Если прежде эта глобальная переменная не была определена, появится диалоговое окно глобальных переменных; в качестве базового пути выберите ваше местоположение установки wxWidgets. Остальные пути заполнять не требуется.
- Задайте опции отладочной (debug) и/или конечной (release) конфигураций проекта. Рекомендуется наличие хотя бы отладочной конфигурации.
- Выберите опции сборки wxWidgets. Далее следует выставить значения опций «wxWidgets Library Settings» в строгом соответствии с опциями сборки wxWidgets о которых говорилось выше. Другие настройки на этой странице, не связанные с параметрами сборки проекта wxWidgets — можно использовать их или не использовать, по своему предпочтению. Для того, чтобы избежать использования отладочной сборки wxWidgets (как рекомендовано), необходимо выбрать «Настроить Расширенные параметры» и затем оставить «Use __WXDEBUG__ and Debug wxWidgets lib» снятым на следующей странице.
- При необходимости выберите дополнительные библиотеки. Вы не должны выбирать любую из них для обычного использования.
Сборка и Запуск[править]
Нажмите «Сборка и запуск» (F9) чтобы проверить сборку и запуск приложения. Если все пойдет хорошо, ваше приложение wxWidgets должно появиться на экране.
Пояснение по опциям сборки wxWidgets[править]
Что означают опции BUILD, SHARED, MONOLITHIC, and UNICODE?
BUILD[править]
BUILD задает какую версию wxWidgets, отладочную (BUILD=debug) или конечную (BUILD=release), следует собрать. В подавляющем большинстве случаев нужна только конечная версия выпуска wxWidgets, так как отладка самого wxWidgets не потребуется. Вполне можно создавать отладочные сборки своих собственных программ, которые ссылаются на конечную сборку wxWidgets.
- Отладочная (debug) сборка wxWidgets ‘ создает библиотеки с суффиксом «d», например «libwxmsw28d.a»/»wxmsw28d_gcc_custom.dll».
- Отладочная (debug) сборка wxWidgets создает папку «mswd» или «mswud» в папке вывода библиотеки wxWidgets.
- Конечная (release) сборка wxWidgets ‘ создает библиотеки без суффикса «d», например, «libwxmsw28.a»/»wxmsw28_gcc_custom.dll».
- Конечная (release) сборка wxWidgets ‘ создает папку «msw» или «mswu» в папке вывода библиотеки wxWidgets.
SHARED[править]
SHARED задает какую версию wxWidgets, динамически связываемую DLL (SHARED=1) или статически связанную static (SHARED=0), следует собрать. При сборке DLL версии компиляция происходит быстрее и размер исполняемого файла меньше. Общий размер одного исполняемого файла плюс библиотеки DLL wxWidgets больше, но одну и ту же библиотеку DLL могут использовать несколько исполняемых файлов и в этом случае получается экономия места на диске.
- Динамически связываемая DLL сборка wxWidgets создает библиотеки импорта (например, libwxmsw28.a) и библиотеки DLL (например, wxmsw28_gcc_custom.dll). При распространении своей программы библиотеку DLL следует включать в дистрибутив.
- Статически связываемая static сборка wxWidgets создает только статические библиотеки (например, libwxmsw28.a), и в дальнейшем не потребуется распространять библиотеки DLL wxWidgets вместе с созданным приложением.
MONOLITHIC[править]
MONOLITHIC задает какую библиотеку, единую (MONOLITHIC=1) или многокомпонентную (MONOLITHIC=0) следует собрать. При монолитной сборке дальнейшие установка и разработка проекта выполняются намного проще, т.к. если используется DLL тип сборки библиотеки, то для распространения потребуется только одна библиотека DLL. При немонолитной (multilib) сборке, собираются несколько различных библиотек, и можно избежать связывания со всей базой кода wxWidgets тех программ, которые не нуждаются в ней. Нужно быть полностью уверенным в своих действиях выбирая правильный компонент библиотеки.
- Монолитная monolithic сборка wxWidgets создает единую библиотеку импорта wxWidgets (такую как libwxmsw28u.a) и единую DLL (такую как wxmsw28_gcc_custom.dll).
- Немонолитная multilib сборка wxWidgets создает несколько библиотек импорта (libwxbase28u.a, etc.) и несколько DLL.
- Дополнительные статические библиотеки всегда создаются с любой сборкой wxWidgets (libwxexpat.a, libwxjpeg.a, и т.д.). Эти библиотеки обычно не требуются при использовании DLL сборки wxWidgets, но они нужны при использовании статической сборки.
UNICODE[править]
UNICODE задает использование в библиотеке wxWidgets и в создаваемой программе поддержки символов Юникода. Эта возможность используется в большинстве программ для ОС Windows 2000 и более поздних версий. Более ранние версии Windows не имели необходимой поддержки Юникода. Вы всегда должны использовать макросы _(«string») и _T(«string») wxWidget для обеспечения того, чтобы жестко закодированные строки были правильного типа.
- Юникод сборка wxWidgets (UNICODE=1) создает библиотеки с суффиксом «u», например, «libwxmsw28u.a»/»wxmsw28u_gcc_custom.dll».
- Юникод сборка wxWidgets создает папку «mswu» или «mswud» в папке вывода библиотеки wxWidgets.
- ANSI сборка wxWidgets (UNICODE=0) создает библиотеки без суффикса «u», например, «libwxmsw28.a»/»wxmsw28_gcc_custom.dll».
- ANSI сборка wxWidgets создает папку «msw» или «mswd» в папке вывода библиотеки wxWidgets.
См. также[править]
- Уроки wxSmith
- Уроки wxSmith: Hello world
- WxWidgets Hello World в Visual C++ и wxFormBuilder
Ссылки[править]
- ↑ Code::Blocks wiki: WxWindowsQuickRef
Code::Blocks Wiki
Code::Blocks’ wiki has a good guide on setting up wxWidgets on Code::Blocks: http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef
Code::Blocks Installation in Windows
This page describes the steps I took in order to get Code::Blocks working with a homemade wxWidgets. I used the Code::Blocks+MINGW 1.0 bundle and wxWidgets 2.6.
NOTE: This guide is for compiling with MINGW, not Cygwin nor MSYS.
Preparing Code::Blocks
- Download Code::Blocks with the MINGW bundle from http://www.codeblocks.org
- Install Code::Blocks
Building wxWidgets from the command line
Downloading the last stable wxWidgets library
The last stable wxWidgets distribution can be found at the wxWidgets website (https://www.wxwidgets.org/downloads/). You can choose between an installer and a zip file. You can just get the zip file because the installer is also a zipped version.
If you use the plain zip version, make sure to unzip using full paths. Otherwise the directories won’t be created correctly.
NOTE: In the rest of these instructions I’ll be calling the wxWidgets directory %WXWIN% you have to change it to your own directory. (e.g. «c:wxWidgets-x.x»)
Building your own wxWidgets library
Before anything, add the bin directory of MinGW under the CodeBlocks installation directory to the %PATH% variable (Windows, Mac).
Now it is time to compile wxWidgets, open the command promt and change to the wxWidgets directory:
cd %WXWIN%buildmsw
Now we are on the right place we are first going to clean up the source:
mingw32-make.exe -f makefile.gcc clean
NOTE: if you still have problems with compiling after cleaning, you may want to remove the directory in the buildmsw directory. (it contains object files…) When everything is clean we can compile wxWidgets:
First we have to configure the build. If your makefile.gcc (in my version on line 7) includes config.gcc, your command line parameters will be overriden by the config-file. Thus edit the compiler settings in config.gcc to reflect your choice. The following are recommended:
USE_XRC=1
SHARED=1
MONOLITHIC=1
BUILD=release
UNICODE=0
Otherwise, you can build wxWidgets from the commandline as follows:
mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=0
Now you can get a cup of coffee, or do something else, because this could take a long time.
NOTE: If you mess up and want to clean, you have to pass the same parameters to make clean.
Example for clean commandline:
mingw32-make.exe -f makefile.gcc clean USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=0
So now everything is compiled for using codeblocks.
Copying libraries
When compilation is finished it is useful to copy the libs to another directory. By doing this you can make several builds (e.g. debug and release).
- So first we create a directory this could be done in %WXWIN%lib.
- Then we go to the directory %WXWIN%libgcc_dll (could called diffrent when you changed the build options)
- Rename the directory %WXWIN%libgcc_dll to the directory of your choice. (For me it is %WXWIN%libgcc_dllNonUnicode)
NOTE: Make sure everything is removed from the directory %WXWIN%libgcc_dll else you can get trouble when compiling another version.
Setting Up Code::Blocks
Compiler/Linker Options
Next you should set up Code::Blocks to use the wx-config compiler and linker arguments. The easiest way to do this is to create new compiler flags, which can be turned on or off as needed later on.
Create a wxWidgets Compiler Flag
- Go to Project —> Build Options
- Under Compiler flags —> General, right-click an item and select «New flag…» from the shortcut menu.
- For the Name field, enter something like, «wxWidgets — Compiler Suggested Settings».
- For the Compiler flags field, enter
`wx-config --cxxflags`
- Press OK
Create a wxWidgets Linker Flag
- Under Compiler flags —> General, right-clicking an item and select «New flag…» from the shortcut menu.
- For the Name field, enter something like, «wxWidgets — Linker Suggested Settings».
- For the Linker flags field, enter
`wx-config --libs`
- Press OK
Now that you have setup the compiler/linker flags, make sure to turn them on under Project —> Build Options —> YourProjectName for wxWidgets projects you wish to build.
Congratulations! You can start developing in wxWidgets. If any problem occurs, just ask at the Code::Blocks forum (http://forums.codeblocks.org/).
Если вам нужна кроссплатформенная библиотека для создания интерфейса программы, то стоит в первую очередь обратить на wxWidgets или Qt. Про Qt много всего интересного написано на сайте Блог программиста, однако я обычно предпочитаю wxWidgets за чуть меньший размер dll-ок, которые необходимо при этом добавлять в программу, да и компилировать программу с ней несколько легче. С другой стороны, wxWidgets — это библиотека исключительно для построения интерфейсов, в то время как Qt — это целый фреймворк, который имеет множество дополнительных возможностей, напрямую с интерфейсом не связанные. Как видно из заголовка, эта статья будет посвящена wxWidgets.
На мой взгляд для кроссплатформенной разработки на C++ в качестве среды разработки больше всего подходит Code::Blocks, с каждой версией этой IDE пользоваться становится все легче, и все лучше она работает «из коробки». В этой статье мы рассмотрим процесс компиляции библиотеки wxWidgets в этой среде.
На странице загрузки wxWidgets можно скачать уже скомпилированные объектные файлы для этой библиотеки, но иногда нужно самому скомпилировать библиотеку, например, если требуется задать какие-то параметры компиляции или скомпилировать каким-нибудь специфическим компилятором.
В этой статье мы рассмотрим компиляцию wxWidgets с помощью компилятора mingw, который прилагается с Code::Blocks. На всякий случай напомню, что mingw — это компилятор GCC под Windows.
Компиляция библиотеки wxWidgets
0. Качаем Code::Blocks Главное скачать Code::Blocks с интегрированным mingw.
1. Устанавливаем Code::Blocks. Здесь нет ничего особенного, под Windows жмем Next -> Next -> Next… Все как обычно.
2. Установка переменной окружения PATH. Code::Blocks может использовать как сторонние компиляторы, так и интегрированный mingw (именно этот случай мы рассматриваем), который после установки будет располагаться в папке C:Program Files (x86)CodeBlocksMinGW. Чтобы было проще использовать этот компилятор, желательно добавить этот путь в переменную окружения PATH. В принципе, этого можно не делать, но тогда во многих случаях при работе с тем же компилятором из командной строки придется или указывать полный путь до компилятора, или добавлять его в ту же самую переменную при каждом сеансе работы. ИМХО, лучше установить эту переменную окружения сразу.
Для того, чтобы установить переменную окружения под Windows, нужно попасть в диалог «System Properties» (поскольку у меня англоязычная Windows, все названия я буду приводить на английском языке, думаю, что найти их русскоязычный аналог не составит труда). Этот диалог достаточно глубоко закопан, чтобы в него попасть под Windows 8.1, нажимаем правую кнопку мыши на кнопке Пуск, выбираем пункт меню System. Откроется следующее окно:
Слева выбираем пункт Advanced system settings и попадаем в диалог «System Properties». Затем на вкладке Advanced нажимаем кнопку Environment Variables
Откроется диалог «Environment Variables», в нижнем списке которого нужно найти переменную Path.
Значение этой переменной у вас будет скорее всего другое. Дважды щелкаем на эту переменную, и в открывшемся диалоге добавляем в конец через точку с запятой путь до запускаемых файлов mingw, т.е. в нашем случае до C:Program Files (x86)CodeBlocksMinGWbin.
3. Качаем wxWidgets. Нужно скачать файл из раздела «Source Code», для простоты будем считать, что скачиваем архив с исходниками в формате zip или 7z.
4. Распаковываем архив с wxWidgets в какую-нибудь папку, например, в C:Librarywxwidgets.
5. Открываем командную строку с помощью команды cmd.
6. В архиве wxWidgets есть специальная папка («buildmsw»), в которой хранятся файлы проекток для компиляции библиотеки под Windows с помощью различных сред. Переходим в эту папку с помощью команды
cd «C:Librarywxwidgetsbuildmsw»
7. Если вы уже пытались (безуспешно) или с другими параметрами компилировать wxWidgets, то нужно предварительно удалить следы предыдущей компиляции. Разумеется, можно просто удалить папку с распакованными файлами библиотеки, а можно воспользоваться скриптом makefile. На самом деле удаление результатов компиляции с помощью makefile может быть полезно, если вы хотите заново перекомпилировать wxWidgets с каким-то определенным набором параметров, в то время как файлы, удачно скомпилированные с другими параметрами компиляции, оставить. Далее (в п. мы будем компилировать библиотеку с использованием параметров USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 USE_OPENGL=1 BUILD=release, поэтому команда удаления должна иметь точно такие же параметры с добавлением команды clean в конце:
mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1
UNICODE=1 USE_OPENGL=1 BUILD=release clean
или
mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=0
UNICODE=1 USE_OPENGL=1 BUILD=release clean
Если во время выполнения этой команды вы получите ошибку о том, что команда mingw32-make не найдена, значит, вы не добавили путь до этой команды в переменную окружения PATH (см. п. 2).
8. Осталось в той же папке C:Librarywxwidgetsbuildmsw запустить компиляцию исходников библиотеки. Теперь мы должны выбрать, компилируем мы библиотеку как монолитную (с параметром компиляции MONOLITHIC=1), когда будет создана одна большая dll-ка, или не монолитную, когда различные пакеты будут собраны в отдельных dll-ках (с параметром компиляции MONOLITHIC=0).
Забегая вперед, вот результирующие файлы, после компиляции wxWidgets в монолитном режиме:
А вот список файлов при компиляции в разные dll-ки:
На странице вики wxWidgets рекомендуются такие параметры компиляции:
mingw32-make.exe -f makefile.gcc MONOLITHIC=1 USE_XRC=1 SHARED=1
UNICODE=1 USE_OPENGL=1 BUILD=release
Здесь:
- Параметр USE_XRC=1 указывает, что при использовании библиотеки можно будет использовать формат XRC для описания интерфейса — формат, основанный на XML/
- Параметр SHARED=1 обозначает, что wxWidgets будет подключаться как dll, а не линковаться внутрь создаваемого exe-шника, который будет использовать wxWidgets.
- Параметр UNICODE=1 указывает, что программа будет использовать кодировку Unicode.
- Параметр USE_OPENGL=1 указывает, что нас интересуют возможности библиотеки, связанные с технологией OpenGL.
- Параметр BUILD=release указывает, что библиотека wxWidgets должна быть скомпилирована без отладочных символов, что ускорит ее работу и уменьшит размер. Параметр может быть записан как BUILD=debug, если вы хотите залезать отладчиком внутрь библиотеки.
Если мы хотим скомпилировать библиотеку не в монолитном режиме, то используем следующую команду:
mingw32-make.exe -f makefile.gcc MONOLITHIC=0 USE_XRC=1 SHARED=1
UNICODE=1 USE_OPENGL=1 BUILD=release
Если вы откроете файл makefile.gcc, то сможете увидеть и другие параметры, позволяющие исключить из библиотеки некоторые возможности, например, ненавистные многим риббоны (USE_RIBBON). Оперируя такими параметрами, возможно, вы сможете уменьшить размер создаваемых dll-ок, что наиболее актуально для компиляции в монолитном режиме.
9. Ждем окончания компиляции… Этот процесс может занять более 10 минут. К счастью, у wxWidgets нет никаких сторонних зависимостей, поэтому, как правило, компиляция завершается удачно. После окончания компиляции в папке C:Librarywxwidgetslibgcc_dll будут созданы объектные файлы и dll-ки, те, что были показаны на картинках выше в п. 8.
Компиляция проекта с использованием wxWidgets
Давайте теперь создадим тестовый проект в Code::Blocks, чтобы убедиться, что wxWidgets скомпилировался нормально, а заодно настроим Code::Blocks для работы с этой библиотекой. Поскольку данная среда разработки уже знает о существовании wxWidgets, то настройка будет минимальной — надо будет указать только путь до папки с библиотекой.
10.1. Создаем новый проект. Для этого в Code::Blocks выбираем пункт меню «File — New — Project…».
10.2. В открывшемся диалоге в разделе «Projects» выбираем тип проекта «wxWidgets project».
10.3. Следующее окно диалога не предсталяет особой ценности — это окно приветствия для данного типа проекта. Внизу есть флажок, установив который, вы избавитесь от показа этого окна в будущем.
10.4. В следующем окне нужно выбрать версию wxWidgets. Для всех примеров этой статьи я использовал wxWidgets 3.0.2, поэтому выбираем пункт «wxWidgets 3.0.x».
Если у вас в списке нет нужной версии wxWidgets, вам нужно обновить Code::Blocks.
10.5. Далее вводим название проекта и путь, где он будет создан.
10.6. В следующем окне можно заполнить поля, рассказывающее об авторе. Эти поля являются не обязательными, их можно оставить пустыми.
10.7. Затем выбираем инструмент, с помощью которого мы будем создавать интерфейс (группа переключателей «Preferred GUI Builder»). Я обычно предпочитаю создавать GUI вручную (переключатель «None»), но можно использовать инструмент для создания интерфейса с помощью мышки.
В этом же окне выбирается тип приложения («Application Type»): главное окно будет диалогом («Dialog Based») или полноценным окном («Frame Based»). Первый тип подходит для небольших приложений, при этом у диалога не может быть строки статуса и главного меню.
10.8. В следующем окне нужно указать путь до библиотеки wxWidgets, куда вы распаковывали скачанный архив.
10.9. Если вы впервые создаете проект на основе wxWidgets, то Code::Blocks покажет вам еще один диалог, где нужно указать путь до wxWidgets еще раз. Это нужно уже для глобальных настроек IDE.
При этом вы можете указать конкретные пути, где у вас расположены вложенные папки «include», «lib» и т.д. Если эти поля оставить пустыми, то будут использоваться пути по умолчанию. Эти поля могут быть полезны, если вы переименуете, например, папку «lib» с целью создания другой папки «lib», скомпилированной с другими параметрами. Поскольку мы ничего такого не делали, оставим дополнительные поля пустыми.
В будущем эти параметры можно поменять, выбрав пункт меню «Settings — Global variables…»
10.10. Затем нужно установить (или подтвердить) некоторые параметры для компиляции — тип компилятора и папки для отладочной и релизной версии сборки нашего проекта.
10.11. Следующее окно уже более интересное и важное.
Здесь мы должны установить параметры, с которыми была скомпилирована библиотека wxWidgets.
- Если при компиляции был установлен параметр SHARED=1, должен быть установлен флажок «Use wxWidgets DLL», иначе он должен быть снят.
- Если при компиляции был установлен параметр MONOLITHIC=1, должен быть установлен флажок «wxWidgets is built as a monolithic library», иначе он должен быть снят.
- Если при компиляции был установлен параметр UNICODE=1, должен быть установлен флажок «Use unicode», иначе он должен быть снят.
10.12. Если вы компилировали библиотеку wxWidgets только в релизном режиме (с параметром BUILD=release), то при переходе к следующему окну Code::Blocks предложит в режиме отладки нашего приложения использовать также релизную версию wxWidgets. Придется согласиться.
10.11. Если вы компилировали wxWidgets не как монолитную библиотеку, то будет показано еще одно окно, в котором нужно выбрать, какие пакеты wxWidgets вам понадобятся (в монолитном режиме они все скомпилены в одну dll-ку).
Можно выбирать несколько пуктов списка (или ничего не выбирать).
10.12. После этого мастер создания проекта завершит совю работу, и будет создан новый проект.
10.13. Теперь можно в верхней панели выбрать цель компиляции (Release или Debug) и скомпилировать проект (выбрав, пункт меню «Build — Build» или «Build — Rebuild»).
Проект должен скомпилироваться без ошибок, и его можно запустить с помощью пункта меню «Build — Run». Результат будет выглядеть следующим образом:
10.14. После компиляции проект без проблем запускается из Code::Blocks, но exe-шник не будет запускаться обычными способами (из файлового менеджера), поскольку рядом с exe-шником нет нужных dll-ок из wxWidgets. Скопировать их можно из папки C:Librarywxwidgetslibgcc_dll (или ее аналога, если вы распаковывали wxWidgets в другую папку). Какие именно понадобятся dll-ки уже зависит от проекта. Но в любом случае при запуске скомпилированного exe-шника Windows напишет, какого файла не хватает.
После копирования нужных dll-ок программа будет запускаться.
На этом все, жду ваших комментариев и уточнений. Надеюсь, что статья окажется вам полезной.
Виктор 04.12.2015 — 15:05
Компиляция библиотеки wxWidgets в Code::Blocks
Спс. Если бы не нашел Вашу статью, наверное, плюнул бы на wxWidgets. Было 5 неудачных попыток его установки.
Сергей 12.12.2015 — 12:22
Компиляция библиотеки wxWidgets в Code::Blocks
единственное рабочеспасобное описание автору спасибо
Ваня 04.02.2016 — 11:51
Благодарность! Всё заработало!
Виталий 22.02.2016 — 19:46
танцы с бубном
Windows 10 базируется на 8 и 8.1, так какого лешего у меня не собирается, делаю все по инструкции, объясните более подробный путь, а то не все очевидно
Виталий 05.06.2016 — 10:34
танцы с бубном
От предидущего комента через несколько дней нашел другой способ, все заработало с версией 3.0.1, после выхода 3.1.0 для винды 10 29 февраля повторил, успешно, на сайте есть собранные библиотеки под ms visual cpp и для gcc
Moose 07.09.2016 — 12:11
не работает
Пытался компилировать версию 3.1.0 — не получается.
1. Ругается на отсутствие Debug, но пишел не как у вас предупреждение, а что Debug Target will not be created.
2. При попытке собрать проект пишет, что не существует файл setup.h
Все остальные настройки как у вас.
Gabd 27.10.2016 — 07:08
должно работать
Имхо, надо проверить пути (Project — Build options… — Search directories) и глобальные переменные (Settings — Global variables… — wx)
gress 10.11.2016 — 21:29
не запстиля тест
ошибка ld.exe||cannot find -lwxmsw30ud|
Иван 30.01.2017 — 20:52
Компиляция библиотеки wxWidgets в Code::Blocks
компилировал tdm-gcc 5.1, напрочь отказывалась собираться, помогло добавление опции CXXFLAGS=-sdt=gnu++11
Александр 30.10.2018 — 10:49
Не нравится Unicode
Добрый день.
Компиляция началась, но потом выдалось что «Unicode не я является внутренней или внешней командой, исполняемой программой или пакетным файлом»
И ничего не создалось.
03.05.2019 — 06:34
А как долго он должен компилироваться? У меня уже 30 мин. прошло.
Лев 03.05.2019 — 06:42
Долгая компиляция
Здравствуйте. У меня компиляция началась минут 40 назад, и все еще идет. Это нормально? И если нет, то что делать?
Лев 03.05.2019 — 06:48
И еще, Файлы в C:Librarywxwidgetslibgcc_dll в монолитном режиме не совпадают названиями с вашим фото.
Лев 03.05.2019 — 06:50
И еще, Файлы в C:Librarywxwidgetslibgcc_dll в монолитном режиме не совпадают названиями с вашим фото.
Jenyay 05.05.2019 — 14:11
Долгая компиляция библиотеки — это нормально.
По поводу отличий имен файлов. Это возможно, поэтому что статью писал очень давно.
Igor 29.07.2019 — 14:05
пожалуйста дополните вашу статью
здравствуйте,
если добавить -j12 или -j4
пример: mingw32-make -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 USE_OPENGL=1 BUILD=release -j12
»’
число 12 соответствует количеству ядер в вашем процессоре.
»’
тогда создание библиотеки займет гораздо меньше времени.
Алексей 19.06.2020 — 20:50
Далеко устаревшая информация. Проще и намного понятнее ставить библиотеку по этой инструкции (Codeblocks 20.03 и wxWidgets 3.1.3): https://youtu.be/QfpIcU9uB_c
У меня всё с первого раза получилось. И не используйте шаблон wxWidgets в Codeblocks, он устаревший, начинайте с чистого проекта.
Дмитрий 11.04.2021 — 05:17
12.05.2021 — 22:38
Поставил из исходников (zip-файл) wxWidgets 3.1.5 для CodeBlocks 20.03 (64-х битный) в Windows 10. Делал всё, как написано в статье, и получилось с 1-го раза. Спасибо за толковое описание!
Петр 28.11.2021 — 12:07
инструкция сработала, все прошло как по маслу, тест собрался. спасибо, а то боялся!
IGOR 07.01.2022 — 15:19
СОЗДАНИЕ wxWidget IN CodeBlocks
спасибо,все получилось !
IGOR 07.01.2022 — 15:23
СОЗДАНИЕ wxWidget IN CodeBlocks
спасибо,все получилось ! Только вопрос ,что с этим делать дальше ? Как это практически использовать ?
Nutga 14.01.2022 — 08:37
Какаой СМЫСЛ ЭТОГО?
Какаой смысл собирать это например для WIN7?
Проще использовать ГОТОВЫЕ VISUAL IDE
Напишите кто считает что Не прав.
Сергей 05.06.2022 — 20:01
Какаой СМЫСЛ ЭТОГО?
Попробуй влезть на железо со своим ГОТОВЫЕ VISUAL IDE в лучшем случае с 1гб озу на борту, а то и меньше.
Вопрос кто прав, кто не прав отпадёт сразу же.
И таких систем очень даже много ещё.
В продолжение поста (новости) wxWidgets. Мелочь, но приятно, ловите печеньку.
Картинка взята с ресурса: ru.wikipedia.org, автор: Bryan Petty.
Выдержка из Wiki: wxWidgets — это кросс-платформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных на уровне исходного кода приложений, в частности для построения графического интерфейса пользователя (GUI).
Библиотека имеет набор классов для работы с графическими изображениями, HTML, XML документами, архивами, файловыми системами, процессами, подсистемами печати, мультимедиа, сетями, классы для организации многопоточности, отладки, отправки дампов и множество других инструментов.
Внимание! Под катом трафик!
Тройку лет назад заинтересовался кросс-платформенным программированием с использованием выше озаглавленной библиотеки. Каждый раз при сборке этой библиотеки возникало куча проблем. Проблемы не были связанны с тем, что библиотека имела какие-то существенные баги, а были связаны с тем, что при использовании подобных инструментов требующих компиляции (сборки), необходимо внимательно относится к сопровождающей литературе.
Если говорить понятным языком, то необходимо внимательно читать мануалы, readme-файлы
, FAQ
и т.д…
Хотя статей по сборке и использованию wxWidgets
достаточно в сети, все равно считаю нужным поделится своим опытом, постараюсь объяснить шаги, которые приводят к положительному результату, и описать что к чему, чтобы разработчики только начинающие использовать wxWidgets
в своих проектах, меньше наступали на грабли, и сразу перешли к использованию всех функциональных возможностей этой библиотеки.
И так, поехали.
Сборку библиотеки будем производить в операционной системе Windows 7 Professional x32 SP1
. Что касается других OS
, то могу смело заявить, что сборка wxWidgets
под Ubuntu Desktop 12.04
, не вызывает особых сложностей, все прекрасно собирается. Для сборки под GNU/Linux, можно воспользоваться этим мануалом.
В качестве IDE (редактора кода и автоматизации сборки), будем использовать Code::Blocks. Думаю многие уже о нем слышали, поэтому не будем вдаваться в подробности. Упомяну лишь, что C::B
– достаточно мощный инструмент для написания больших приложений, и напрямую «заточен» под использование библиотеки инструментов wxWidgets
, т.к. сам собран с использованием этой библиотеки.
1) Установка компилятора, средств отладки и предварительная настройка:
Средства отладки (дебагер
), обычно устанавливаются по умолчанию вместе с компилятором, в случае компиляторов GCC
и некоторых других, — это файл со скромным названием GDB
.
FAQ: Первые грабли с которыми сталкиваются начинающие разработчики, — это неверная установка используемого для сборки библиотеки компилятора. Большинство устанавливают
MinGW
вместоTDM-GCC
, на котором собственно и ведется разработкаwxWidgets
подWindows
.Ссылка:
TDM-GCC
это альфа сборка новых релизовgcc
собранных дляmingw
текущий официальный выпускmingw
включает в себяgcc 3
и более новых версийgcc
раньше разработчикамиmingw
не выкладывалось. Поэтому один из разработчиков стал собирать новыеgcc
и выкладывать пакеты предназначенные для заменыgcc
в установленномmingw
. Сейчасgcc 4.5
есть и уmingw
http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/GCC/Version4/ хз чем они отличаются…Стоить отметить, что при установке
MinGW
, библиотека может собраться, но с очень малой вероятностью, скорее всего в конце сборки, после многоминутного ожидания, вы получите сообщение об ошибке вроде этой:
if not exist ....libgcc_libmswud mkdir ....libgcc_libmswud
g++ -c -o gcc_mswudmonolib_treectrl.o -g -O0 -mthreads -DHAVE_W32API_H -D__WXMSW__ -D_UNICODE -I....libgcc_libmswud -I....include -W -Wall -DWXBUILDING -I....srctifflibtiff -I....srcjpeg -I....srcpng -I....srczlib -I....srcregex -I....srcexpatlib -I....srcstcscintillainclude -I....srcstcscintillalexlib -I....srcstcscintillasrc -D__WX__ -DSCI_LEXER -DLINK_LEXERS -DwxUSE_BASE=1 -Wno-ctor-dtor-privacy -MTgcc_mswudmonolib_treectrl.o -MFgcc_mswudmonolib_treectrl.o.d -MD -MP ../../src/msw/treectrl.cpp
makefile.gcc:9395: recipe for target 'gcc_mswudmonolib_treectrl.o' failed
Переходим на официальный сайт компилятора TDM-GCC
в раздел загрузки, скачиваем и устанавливаем последнюю стабильною версию соответствующую разрядности нашей операционной системы (x32
или x64
). В нашем случае это: tdm-gcc-4.8.1-3.exe
.
Далее стандартная процедура: запускаем мастер установки, и устанавливаем компилятор с опциями по умолчанию.
Совет: При установке каких либо программ, библиотек, распаковки пакетов и т.д., лучше всего использовать, в мастере установки программ, настройки (опции) по умолчанию. Поверьте, это вызовет намного меньше забот, и меньше плясок с бубном вокруг библиотек и программ. Это касается, библиотек, программ, и всевозможных компиляторов.
Настройка компилятора заключается в том, что необходимо добавить в системную переменную окружения Path, путь к бинарным сборкам компилятора, если этого не сделал мастер установки по умолчанию. Обычно это: C:TDM-GCC-32bin
(если директорией установки (распаковки) был выбран корневой каталог диска C:
);
Проверка: Проверка работоспособности будет заключаться в следующих действиях: запускаем командную строку (
CMD
), и просто выполняем команду:mingw32-make -v
соответственно видим версию сборки make — компоновщика. Должно появится чтото вроде этого:
2) Загрузка, распаковка и сборка библиотеки wxWidgets
:
Переходим на официальный сайт библиотеки wxWidgets
в раздел загрузки, скачиваем и распаковываем последнюю стабильною версию библиотеки для OS Windows
. В нашем случае это: wxMSW-Setup-3.0.0.exe
(Windows Installer
).
Далее стандартная процедура: запускаем мастер распаковки, и распаковываем библиотеку с опциями по умолчанию.
Предварительная настройка компилятора заключается в том, что необходимо добавить системную переменную окружения WXWIN
, которая будет содержать путь к корневому каталогу библиотеки. Обычно это: C:wxWidgets-3.0.0
(если директорией установки (распаковки) был выбран корневой каталог диска C:
);
Собственно приступаем к сборке. Запускаем командную строку (CMD
), и выполняем по порядку следующие команды (дожидаясь завершение выполнения каждой):
cd %WXWIN%buildmsw
mingw32-make -f makefile.gcc clean
mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0
mingw32-make -f makefile.gcc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0
Обычно количество опций сборки не превышает указанных.
Разберем назначение указанных опций:
BUILD
— сборка библиотеки в режиме:debug
(отладки) илиrelease
(релизной версии приложения);
SHARED
— тип сборки библиотеки: 0 —static
статическая сборка, 1 —dynamic
динамическая сборка соответственно;
MONOLITHIC
— собрать все библиотеки в «одну»: 1 — да, 0 — нет, удобно на первых этапах знакомства с библиотекой;
UNICODE
— Поддержка unicode: 1 — да, 0 -нет;
WXUNIV
— собрать элементы интерфейса общими для любойOS
: 1 — да, 0 — нет. (или сборка собственных элементов управления для операционных систем где эти элементы отсутствуют).
Процесс сборки будет похож на этот скриншот:
3) Загрузка, установка и настройка IDE Code::Blocks
:
Переходим на официальный сайт программы Code::Blocks
в раздел загрузки, скачиваем и устанавливаем последний стабильный бинарный релиз программы для OS Windows
. В нашем случае это: codeblocks-13.12-setup.exe
. Необходимо загружать версию без компилятора, т.к. компилятор мы установили ранее, и скорее всего он «свежее» компилятора который идет в поставке с C::B
.
FAQ, Note: The codeblocks-13.12mingw-setup.exe file includes the GCC compiler and GDB debugger from TDM-GCC (version 4.7.1, 32 bit). The codeblocks-13.12mingw-setup-TDM-GCC-481.exe file includes the TDM-GCC compiler, version 4.8.1, 32 bit. While v4.7.1 is rock-solid (we use it to compile C::B), v4.8.1 is provided for convenience, there are some known bugs with this version related to the compilation of Code::Blocks itself.
IF UNSURE, USE «codeblocks-13.12mingw-setup.exe»!
Примечание: Общее время компиляции занимает в среднем порядка 30-40 минут. Да-да, библиотека не такая уж и маленькая, имеет кучу классов.
Далее стандартная процедура, запускаем мастер установки, и устанавливаем программу с опциями по умолчанию.
Настройки среды разработки сводятся к настройке компилятора по умолчанию. Обычно при первом запуске C::B
сам выдаст диалог для выбора основного компилятора из всех найденных (выбираем TDM-GCC
), но иногда этот диалог может не появлятся. Тогда запускаем C::B
и переходим по пунктам главного меню к настройкам компилятора: Settings-->Compiler Вкладка: Toolchain executables
и по анологии со скриншотом настраиваем C::B
.
Проверка: Для проверки работоспособности среды разработки и проверки правильной настройки компиляторов, необходимо в
C::B
создать тестовый консольный проект, следующим образом:
1) ЗапускаемC::B
(если он не запушен ранее);
2) Переходим по пунктам меню:File-->New-->Project
в открывшимся диалоге (Project
) выбираемConsole application
и нажимаем кнопку [Go
];
3) Следуем подсказкам диалога предварительной настройки проекта, задаем параметры проекта (имя, расположение и т.д), нажимаем кнопку [Next
] затем [Finish
];
Открылся редактор кода проекта. Если нет то Выбираем пункты главного меню:View-->Manager
,View-->Toolbars-->Compiler
. Открываем исходный код в дереве менеджераmain.cpp
,должен быть такой код:
если необходимо редактируем.4) Выбираем пункт главного меню:
Build-->Build and Run
, и наблюдаем наше скомпилированное приложение:
4) Создание тестового проекта с использованием wxWidgets
:
Запускаем C::B
если он не был запущен, и переходим по пунктам главного меню: File-->New-->Projects
из всех типов создаваемого проекта, выбираем wxWidgets project
, нажимаем кнопку [Go
].
В появившимся окне предварительной настройки проекта, следуем подсказкам, а именно:
1) Нажимаем кнопку [Next
];
2) Выбираем тип используемой библиотекиwxWidgets 3.0.x
, нажимаем кнопку [Next
];
3) Задаем параметры проекта имя, путь к исходникам и т.д., нажимаем кнопку [Next
];
4) Задаем авторов проекта (это можно пропустить), нажимаем кнопку [Next
];
5) Выбираем дизайнер формwxSmith
(т.к.wxFormBuilder
— у нас предварительно не установлен), также выбираем тип создаваемого приложенияFrame Based
, нажимаем кнопку [Next
];
6) Очень внимательно отнесемся к локальной переменной, и вместо$(wx)
зададим$(WXWIN)
, нажимаем кнопку [Next
];
7) выбираем компилятор (обычно по умолчанию) нажимаем кнопку [Next
];
в случае нашей сборки (статической-не монолитной), параметры следующего окна должны быть такими:
нажимаем кнопку [Next
] и соглашаемся с диалогами.
9) Выбираем необходимые нам классы с которыми мы хотим работать.
В зависимости от способа сборки, статическая-динамическая, монолитная и ли нет следующего окна может не быть.
нажимаем кнопку [Finish
];
Глобальные переменные проекта должны быть настроены следующим образом (Settings-->Global variables
):
Настройки проекта должны выглядеть примерно так (Project-->Build options
):
Окно Project build options
(wx_test
) [Вкладка Compiler settings - Other options
]:
-pipe
-mthreads
-Winvalid-pch
-include wx_pch.h
Окно Project build options
(wx_test
) [Вкладка Compiler settings - Other options
]:
__GNUWIN32__
__WXMSW__
wxUSE_UNICODE
WX_PRECOMP
Окно Project build options
(wx_test
) [Вкладка Linker settings
]:
Окно Project build options
(wx_test
) [Вкладки Search directories - Compiler и Resource compiler
]:
$(WXWIN)include
Окно Project build options
(Debug
) [Вкладка Linker settings
]:
Окно Project build options
(Debug
) [Вкладки Search directories - Compiler и Resource compiler
]:
$(WXWIN)libgcc_libmswud
Окно Project build options
(Debug
) [Вкладки Search directories - Linker
]:
$(WXWIN)libgcc_lib
Окно Project build options
(Release
) [Вкладка Linker settings
]:
Окно Project build options
(Release
) [Вкладки Search directories - Compiler и Resource compiler
]:
$(WXWIN)libgcc_libmswu
Окно Project build options
(Release
) [Вкладки Search directories - Linker
]:
$(WXWIN)libgcc_lib
Далее сохраняем настройки путем нажатия кнопки [Ок
] в форме настройки сборки проекта Project build options
.
Скомпилируем (собирем) наше приложение (Build --> Build and run
):
FAQ
FAQ:
Вопрос/Проблема:
Set system path!
Ответ/Решение:
set PATH (WXWIN):
C:wxWidgets-2.9.4Вопрос/Проблема:
if not exist gcc_mswud mkdir gcc_mswud
process_begin: CreateProcess(NULL, -c «if not exist gcc_mswud mkdir gcc_mswud», …) failed.
make (e=2): =х єфрхЄё эрщЄш єърчрээvщ Їрщы.
mingw32-make: [gcc_mswud] Error 2 (ignored)
if not exist ….libgcc_lib mkdir ….libgcc_lib
process_begin: CreateProcess(NULL, -c «if not exist ….libgcc_lib mkdir ….libgcc_
lib», …) failed.
make (e=2): =х єфрхЄё эрщЄш єърчрээvщ Їрщы.
mingw32-make: *** [….libgcc_lib] Error 2
Ответ/Решение:
Run to cmd: set PATH=c:mingwbinВопрос/Проблема:
CodeBlocks wxWidgets’ location:
Ответ/Решение:
$(#wx) to $(WXWIN)Вопрос/Проблема:
Global Variable Edition
Settings -> Compiler and Debugger -> Compiler Settings tab -> Compiler Options
Ответ/Решение:
base: C:wxWidgets-2.9.4
include: C:wxWidgets-2.9.4include
lib: C:wxWidgets-2.9.4lib
cflags: `wx-config —cflags`
lflags: `wx-config —libs`
Other options:
`wx-config —cxxflags`
`wx-config —cflags`
`wx-config —libs`что касается путей. вообще, если ты создашь wxWidgets проект в Code::Blocks, ты увидишь, что в настройках он вместо перечисления хедеров и библиотек указывает команды:
`wx-config —cflags` — в настройках компилятора
`wx-config —libs` — в настройках линкера
так вот: wx-config — это скрипт. если ты наберёшь эти команды в обычной консоли, то увидишь, что они генерируют целую последовательность флагов и файлов. у wx-config есть хэлп: wx-config —help. там описаны все вариации вызова этого скрипта. обрати внимание на опцию static.На ошибки рода C:wxWidgets-3.0.0includewxplatform.h|189|fatal error: wx/setup.h: No such file or directory|
Решение такое:
Projects —> Build options…
Debug (Search directories)
$(WXWIN)libgcc_libmswud <—> $(WXWIN)libgcc_dllmswudБывают и неприятности. Например линовка может выдавать следующую ошибку:
rem gcc_mswudllmonodll_xh_combo.o: file not recognized: Memory exhausted
rem collect2.exe: error: ld returned 1 exit status
rem mingw32-make.exe: *** [….libgcc_dllwxmsw28u_gcc.dll] Error 1Проявляется на некоторых 32 битных платформах при компоновке монолитной динамической библиотеки из-за нехватки памяти. Из-за того, что линковщик собранный для x86 архитектуры, не может использовать адреса выше 2Гб, даже на x86_64 архитектуре. Поэтому смена компилятора обычно не помогает, перепробованы MinGW4.4.1TDM, всё семейство MinGW4.6.x, а также MinGW4.7.0, хотя в сети есть информация, что собирается под TDM-GCC 4.5.2 sjlj.
Для компиляции в этом случае необходимо указать опцию компилятора -fno-keep-inline-dllexport:
mingw32-make -f makefile.gcc CXXFLAGS=»-fno-keep-inline-dllexport» BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1
Ещё можно использовать опцию —large-address-aware для линковщика(можно и для компилятора), но при этом надо настраивать ОС.
Также обойти проблему можно не используя монолитную сборку, или отказавшись от создания динамических библиотек для монолитной сборки, статические собираются без этой ошибки.
Upd:
Ошибки рода: This file requires compiler and library support for the ISO C++
2011 standart. This support is currently experimental, and the —std=c++11 or -std=gnu++11 compiler options.
This file requires compiler and library support for the…Решаются явным указанием стандарта при сборке библиотеки (добавление опции):
CXXFLAGS=»-std=gnu++11″
Upd1: вероятно в последних релизах MinGW баги пофиксили, теперь можно смело собирать при помощи указанного компилятора, соблюдая те же (описанные) правила.
p/s.
Пост ориентирован прежде всего на начинающую аудиторию программистов, и не в коем случае не претендует на истину в последней инстанции.
В следующих постах опишу как «правильно» собрать библиотеку компьютерного зрения OpenCV.
Спасибо за внимание.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Как Вам пост?
70.22%
Отличный туториал, давай еще!
125
17.42%
Давай по новой Миша, все фигня!
31
12.36%
Полно уже, ненужно это здесь.
22
Проголосовали 178 пользователей.
Воздержались 85 пользователей.
PB’s Guide to Starting with wxWidgets on Microsoft Windows with MinGW and Code::Blocks
This Microsoft Windows specific guide hopes to assist the readers
with decisions regarding which wxWidgets version and configuration
to use and show how to build wxWidgets using MinGW with various
parameters affecting the resulting build. It also describes in
detail setting-up a wxWidgets project in popular IDE Code::Blocks.
This guide is not a reference manual, it is a tutorial for new users
of wxWidgets, MinGW, and Code::Blocks; supposed to be followed step by step.
Current Guide Version
4.2, released December 27, 2022
Versions of Software Used in Guide
wxWidgets: 3.2 (3.2.1 at the time of writing)
MinGW: MSYS2 mingw-w64-x86_64-toolchain (GCC 12.2 at the time of writing)
Code::Blocks: 20.03
Warning
This guide does not cover actual wxWidgets programming nor using Code::Blocks
(besides the steps necessary to set up a wxWidgets project).
Note
I suggest viewing this guide in a proper PDF viewer (such as Adobe Acrobat Reader),
since GitHub’s PDF viewer seems not to support displaying navigable
table of contents or clicking on internal cross-references.
В этой иллюстрированной статье описано, как можно создавать графические приложения в CodeBlocks с помощью библиотеки инструментов wxWidgets. Статья предназначена для новичков, но предполагает, что читатель уже не испытывает проблем с созданием консольных приложений вида «Hello World». CodeBlocks можно скачать c codeblocks.org, wxWidgets c wxwidgets.org.
wxWidgets — это библиотека графических инструментов (по-английски Widget toolkit). Она необходима для того, чтобы в среде CodeBlocks можно было создавать программы с графическим интерфейсом. Считаю это лучшим решением, чем GTK+, которая более ориентирована на Линукс-платформы и создаёт интерфейсы, тяжело работающие на Windows. Библиотека преднаначена для использования на огромном числе различных платформ, у каждой из которых свои особенности. И кроме того, зависит от некоторых элементов окружения. Поэтому создатели wxWidgets не дают готовые дистрибутивы, а предлагают пользователям самостоятельно их скомпилировать. Порт библиотеки на каждую платформу имеет своё название. Для варианта на Windows используется наименование wxMSW (wxWidgets MicroSoft Windows), на это слово следует ориентироваться при чтении документации.
Нижеизложенная статья является иллюстрированным пересказыванием шагов, приведённых на официальном сайте wiki.codeblocks.org и в документе docsmswinstall.txt , вложенном в распространяемые исходники. В некоторых местах Интернета можно отыскать немного отличающиеся наборы параметров для коппиляции. Автор данной статьи не берётся судить, какой подход более корректен, следует официальным документам и сразу предупреждает, чтов результате при создании графических элементов в CodeBlocks отмечены некоторые глюки. В качестве ОС используется Windows 7, компилятор MinGW в разновидности GCC. Именно этот компилятор идёт в комплекте с CodeBlocks, он также может быть установлен отдельно с сайта mingw.org. Если используете другой компилятор, то лучше поищите более специализированную инструкцию.
1. Исходим из того, что в вашей системе уже имеется компилятор С++, но путь к нему ещё не занесён в систему. Выполним это. Компилятор С++ нужен, поскольку на этом языке написан исходный код wxWidgets. И если у вас установлен и работает CodeBlocks, то значит, имеется компилятор MinGW/GSS. Необходимо найти папку с этим компилятором и в ней подпапку bin. Если CodeBlocks установлен в систему (т.е. не портативная версия), то быстрее всего это будет C:Program FilesCodeBlocksMinGWbin . Скопируйте в буфер полный адрес данной подпапки.
2. Из меню Пуск зайдите в Control Panel > System > Advanced system settings > Environment Variables… Появится окно Environment Variables.
(Примечание: вы можете сразу попасть в окно System, если воспользуетесь горячей клавишей <Win>+<Pause>. Рекомендую её запомнить.)
3. В списке «System variables» найдите Path. Нажмите кнопку «Edit…». В конце списка папок поставьте точку с запятой и добавьте ранее скопированный путь. Будьте очень внимательны на этом шаге: вы конфигурируете всю Windows. Если вначале у вас там было, к примеру,
%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0
то после внесения должно получиться
%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;C:Program FilesCodeBlocksMinGWbin
4. Скачайте исходный код wxWidgets с wxwidgets.org/downloads, вариант «Windows ZIP» (не Installer). Традиционно рекомендуется брать последний стабильный релиз (не «development»). В настоящий момент это 3.0.3. Если хотите релиз 3.1.0, то учтите, что официальная версия CodeBlocks 16.01 его не поддерживает, вам нужна редакция «Nightly builds». (о ней в конце статьи)
5. Распакуйте архив в папку, в путях к которой нет пробела. К примеру, C:wxWidgets .
6. Запустите CMD (интерпретатор командной строки). Обычно это делается обычно через нажатие на клавиатуре <Win>+<R> и пропечатывание в появившемся окне команды cmd.
7. В CMD перейдите в папку с распакованным wxWidgets и углубитесь в поддеректорию buildmsw. Если устанавливаемая библиотека у нас находиться по адресу C:wxWidgets, то перейти туда можно командой «cd wxWidgetsbuildmsw» (без кавычек). (cd означает «change directory» — сменить директорию. А означает, что адрес новой директории нужно вычислять, начиная с корня диска.)
8. Скопируйте в командную строку страшную команду
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport
Она взята с wiki.codeblocks.org. Внизу страницы есть краткое объяснение, что означает каждый компонент. Также за разъяснениями можно обратиться в конец упоминавшегося документа docsmswinstall.txt из установочного дистрибутива.
9. Идите пить чай и заниматься подобными вещами: компиляци занимает около получаса, от вас более ничего не нужно. Наберитесь терпения и дождитесь, пока опять не появится неторопливо мигающая строка запроса.
(Создатели wxWidgets рекомендуют добавить в систему environment variable WXWIN, указывающую на папку с установленным wxWidgets. Это в дальнейшем позволит производить некоторые действия более коротким способом. Производится в том же окне, где мы в самом начале добавляли в систему путь к компилятору MinGW. Только в этот раз используйте кнопку New. Подробности не расписываю. Если это действие приводит вас в смятение, то пропустите. На работу wxWidgetx внутри CodeBlocks наличие этой переменной в системе не сказывается.)
Второй этап. wxWidgets уже скомпилирован, теперь все дальнейшие операции выполняем только внутри CodeBlocks. Для создания программы с графическим интерфейсов выполните следующее:
1. Убедитесь, что у вас подключён плагин wxSmith. Для этого зайдите в главно меню на Plugins > Manage plugins. Плагин традиционно отображается в самом низу. Достаточно включить сам wxSmith. Дополнительные модули «wxSmith — Aui», «wxSmith — Contrib Items» и «wxSmith — MIME plugin» по желанию. Влияния этих модулей на удобство и безглючность реализации основного функционала базовых элементов замечено не было.
2. Традиционное File > New > Projects…
3. В списке шаблонов выбрать «wxWidgets project«.
4. На следующем экране wxWidgets version выбираем ту версию, которую подключаем. В нашем случае «wxWidgets 3.0.x«.
5. Далее идут несколько стандартных экранов. Всё также, как и при создании консольных приложений.
6. Preferred GUI Builder: wxSmith (если выбрать None, то инструментов WYSIWYG не будет, а wxFormBuilder — это внешнее приложение, которое нужно отдельно устанавливать.)
Application Type: Рекомендую выставить Frame Based, поскольку Dialoge Based плохо стыкуется с wxWidgets, именно в этом режиме наблюдается подавляющее большинство глюков.
В двух словах об особенностях данных типов. Dialog Based предназначен для маленьких приложений с интерфейсом вида ‘нажал на кнопку — выскочило сообщением’. Frame Based предназначен для серьёзных приложений, подразумевающих наличие меню, строки состояния и многокомпонентных пользовательских окон. Почти все программы разрабатываются на Frame Based, так что кривость wxWidgets на Dialog Based не является серьёзной проблемой.
7. wxWidgets’ location. При нажатии на многоточие выскочит окно запроса, в нём в поле base укажите папку, где вы разместили wxWidgets. После закрытия окна этот адрес автоматически перенесётся в wxWidgets’ location. (В будущем вы всегда сможете подправить значение этой переменной через Settings > Global variables…)
8. На следующем окне уберите галочку с «Create Debug configuration«, поскольку библиотека wxWidgets скомпилирована нами только в режиме Release. Нам нет смысла залезать в отладку компонентов самого wxWidgets.
9. Следующем шаге в группе полей «wxWidgets Library Settings» необходимо проставить галочки в соответствии с теми параметрами, с которыми мы ранее скомпилировала wxWidgets. Т.е. все три опции должны быть отмечены. В группе полей «Miscellaneous Settings» — на ваш выбор.
Рекомендуется отметить «Configure Advanced Options» и на следующем шаге убедиться, что опция «Use_WXDEBUG_and Debug wxWidgets lib» пуста (нам не нужно заниматься отладкой самого wxWidget). «Release Target» лучше переставить в «GUI Mode«, чтобы создавалось чисто-оконное приложение. В случае выбора «Console Mode» одновременно создадутся два окна: консольное и оконное.
10. Всё сделано. Теперь можно создавать графический интерфейс. У процесса есть свои особенности, которые нужно понять. Для тестирования можете попробовать создать кнопку, произведите на ней двойной щелчок и в появившемся коде внутри функции ::OnButton1Click прописать
wxString msg = «Hello wxWidgets!»;
wxMessageBox(msg, _(«Very clever text»));
Если собираетесь в будущем регулярно создавать графические интерфейсы посредтсвом wxWidgets, то ознакомьтесь с программой wxFormBuilder — возможно, что создавать интерфейс через неё будет удобнее.
Примечание:
Если имеете в системе внешний компилятор, вроде MinGW, то лучше установите CodeBlocks в редакции «Nightly builds». Делается это просто: на форуме открываете тему с последним релизом, скачиваете 3 архива с компонентами программы (это сама программа и две библиотеки от третих разработчиков) и распаковываете их в одну папку, не содержащую в своём пути пробелов (к примеру, С:CodeBlocks).
Осваиваем wxWidgets: серия первая – установка под Windows.
September 21st, 2007 Begemot Posted in Программирование
“Ох, нелегкая это работа, из болота тащить бегемота” (с)
Скромная попытка описать свой опыт установки и начала работы с wxWidgets бесплатной кроссплатформенной библиотекой.
Последнии несколько дней имел длительный полов опыт сборки, установки и настройки этой библиотеки. Компиляции проектов под разными IDE, разными компиляторами, и в разных осях.
Все началось с того что я вновь (после двухмесячного перерыва) взялся осваивать wxWidget, с которой свзяваю надежды на долгое и плодотворное сотрудничество, а может даже и безбедную старость. В этот раз начал с того что выкачал и собрал новую версию – 2.8.5. После этого почему-то перестал собиратся мой тестовый проект. Вообщем меня это подтолкнуло к более глубокому разбирательству что и как нужно делать. После почти двух дней, возни благодаря помощи TRex’a, вроде как оно работает. Решил поделится результами, может кого-то избавит от граблей, а мне прибавит пару очков к карме
Disclaimer: все что описанно ниже это не правильный вариант установки и настройки wxWidgets, а просто вариант который заработал у меня.
Компилируем wxWidgets под Windows.
Решив перейти с MFC на wxW я решил заодно и сменить студию на Code::Blocks. Он бесплатен, os, написан на wxW соответственно есть версия для как для винды так и для линукса (а так же неофициальные билды для MAC OS) – все таки работать в одной среде под разными ОС вместо двух разных мне кажется удобнее. Для Code::Blocks скачал и поставил компилятор MinGW (Хотя сама среда поддерживает практически любой компилятор который вы захотите). Решите попробывать Code::Blocks – ставьте только ночной билд (искать на форуме), но не официальный RC2.
Качаем исходники wxWidgets, достаем из архива и ложим на постоянное место жительства (у меня в пике занято было почти 2Гига места, учтите), у меня это E:ConstwxWidgets-2.8.5. Смотрим нет ли патчей на самую свежею версию, на 2.8.5 уже есть один – качаем и ставим.
Собираем wxWidgets с использование MinGW.
Читаем INSTALL-MSW.txt в корневом каталоге. дальше компилируем с помощью make файла, идем в E:ConstwxWidgets-2.8.5buildmsw и выполняем
mingw32-make -f makefile.gcc BUILD=debug UNICODE=1
Остальные опции остаются по умолчанию, минут через 10 получаем статическую не монолитную юникодную дебаг версию библиотеки. Дальше меняем debug на release (BUILD=release) и получаем релиз версию.
Еще есть опция MSLU=1 судя по хелпу включает поддержку Microsoft Layer for Unicode, в этом случае можно будет собирать приложения для работы под 98 с поддержкой юникода. Вроде бы нечего плохого быть не должно, но я решил пока компилить без нее, на всякий случай
Visual Studio 2005 или VC Express.
В принципе Code::Blocks производит достаточно приятное впечетление, за исключением одной вещи. У меня возникло чуство что юниксовский дебагер gdb – не совсем отвечает моим представлениям об удобстве и функциональности хорошего дебагера (мы молодежь развращенны Visual Studio). Правда говорят можно прикрутить дебагер от MS, незнаю, пока не пробывал. И я стал смотреть в сторону VC Express: Лицензионно чисто так как бесплатно(и даже Visual Assist не нужен), и по слухам довольно удобно, и главное отладчик хороший:). Вообщем я решил что ничего плохого не будет если под виндой я возможно буду работать в экспрессе. Хотя я его только сегодня поставил и еще совсем не опредился что же будет использоватся как основное IDE.
Открываем проект E:ConstwxWidgets-2.8.5buildmswwx.dsw, конвертим его в новый формат. Дальше есть два пути первый просто скомпилить все проекты как предлагают разработчики библиотеке, второй – изменить динамическую линковку на статическую как предлагает TRex в своих видео-туториалах по сборке wxWidgets и настройке разных IDE. По слухам второй вариант лучше так как генерируемые ехе гарантированно работают везде, хотя расплачиваться за это приходится увеличенным размером файла. Так как у меня уже был печальный опыт с динамической линковкой MFC… вообщем делаем вот что (краткое резюме для тех кто не хочет смотреть видео):
- Выбираем все файлы в дереве проектов и жмем alt-f7
- С++ -> Code Generation -> Runtime Library -> меняем /MD на /MT для релиза и /MDd на /MTd для дебага.
Имейте ввиду что менять нужно для нужной вам конфигурации, я себе собирал статическую юникодную версию (Unicode Debug и Unicode Release) именно для них и меняем. Собираем оба варианта.
Дальше копируем файл include/wx/msw/setup.h в include/wx/setup.h
Не забываем прописать в VC++ Directories $(WXWIN)/include и $(WXWIN)/lib/vc_lib.
Вроде ничего не забыл.
Очистка
После всего этого папка с wxWidgets занимает 1.5+G. Проблемой очистки я заинтересовался, когда хотел рядом с 2.8.4, поставить параллельно 2.8.5. Первый вариант был такой
del /S *.obj,*.res;*.pch;*.pdb;*.tlb;*.idb;*.ilk;*.opt;*ncb;*.sbr;*.sup;*.bsc;*.o
В корневом каталоге вхВ. Удаляем все временные файлы VC компилятора и *.o для MinGW. Вариант оказался неудачным посколько *.pdb точно нужны для отладки, а *.manifest и некоторые другие расширения присутсвуют в самой поставки wxWidgets.
Второй раз я был более осторожен и решил удалить только папки vc_mswud и vc_mswu в E:ConstwxWidgets-2.8.5buildmsw.Там лежат obj и pch, которые занимают дофига места (600 метров). Я не совсем уверен хорошая ли это идея убить pcompiled headers – так как слегда слаб в теории, но рискнул. Также в корзину идет wx.ncb расположенный чуть выше.
Что чистить после MinGW? Точно не знаю, в папке E:ConstwxWidgets-2.8.5buildmswgcc_mswud и gcc_mswu я вижу только *.o и *.o.d файлы. Что это в гугле я не нашел (ужас!). Но эксперементальным путем выяснил что удаление этих двух папок, ни компиляции ни отладки тестового проекта не мешает, зато прибаляет нам 400 метров.
И так: удаляем в папке E:ConstwxWidgets-2.8.5build файл wx.ncb, и подпапки gcc_mswud, gcc_mswu, vc_mswud и vc_mswu. В итоге все занимает 680 метров, из котрых 600 это либы которые мы только что скомпилили и отладочная инфорация, остальное исходники и скрпиты компиляции. Вообщем ничего лишнего.
Пока все. Но в переди еще настройка проектов для VC Express и Code::Blocks with MinGW, компиляция библиотеки и тестового приложения на линуксе. Вообщем прощаюсь не на долго
А пока курим:
- http://www.wxwidgets.org/wiki/index.php/Compiling_WxWidgets и оттуда по ссылкам…
- WxWidgets video tutorial
Если вам понравился этот пост вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.
Related:
- » И снова про иконки
- » Google Translate на вашем сайте
- » Озарение или питон, мать его
- » Прогресс не остановить
- » Отдельный блог про wxWidgets
Привет, Хабр!
Сегодня я хочу поделиться своим опытом компилирования CodeBlocks из исходников под Windows 7/10. Для начинающих этот увлекательный процесс изобилует подводными камнями и особенностями.
Устанавливаем среду CodeBlocks
Для начала качаем последние стабильные бинарники codeblocks для Windows вместе с компилятором MinGW, или раздельно IDE и MinGW. В моем случае была скачана и установлена версия codeblocks-20.03-32bit-mingw-64bit-setup.exe c 64 битным компилятором. ( Страница загрузок codeblocks и зеркало. )
Замечание: Версия компилятора должна быть относительно свежей. В данном случае это gcc 8.1.0.
Устанавливаем СodeBlocks по пути, не содержащем длинные имена. Например в папку C:Soft. Далее необходимо прописать в переменную Path путь к папке бинарных файлов MinGW «C:SoftcodeblocksМinGWbin«. Это можно сделать нажав Win + Pause/Break, перейти в Дополнительные параметры системы и открыть Переменные среды. Изменить можно либо системную переменную Path, либо переменную Path среды текущего пользователя (если все операции далее будут выполняться под ним).
Замечание: Установленный в системе компилятор MinGW ( gcc.exe ) должен быть один в системе, либо при запросе из командной строки быть основным доступным. Если по какой-то причине у Вас в системе есть несколько версий данного компилятора, то самым простым способом будет временно переименовать папки с другими его версиями.
Если все правильно сделано, то при вводе во вновь открытой командной строке команды gcc -v должна появиться информация о настройках и версии компилятора.
Следующим шагом необходимо настроить установки компилятора в CodeBlocks. Для этого запускаем CodeBlocks, и в параметрах Settings > Compiler > Toolchain executable настраиваем путь к папке MinGW. Параметры по умолчанию я заменил так:
-
C compiler: gcc.exe
-
C++ compiler: g++.exe
-
Linker for dynamic libs: g++.exe
Остальные оставил как есть:
Библиотека wxWidgets
Скачиваем исходники актуальной версии wxWidgets с сайта. На сегодня это версия wxWidgets-3.1.5. Файлы для Windows упакованы в вариантах Zip и 7z.
Создаем рабочую папку проектов C:codeblocks . Распаковываем архив, получившуюся папку wxWidgets-3.1.5 переносим в C:codeblocks . Необходимо также создать глобальную переменную WXWIN=c:codeblocksxWidgets-3.1.5 .
Прежде, чем приступать к сборке, необходимо настроить файл setup.h под требования сборки исходников CodeBlocks. Для Windows открываем в IDE файл wxWidgets — (путь_WXWIN)includewxmswsetup.h
-
В строке 22 контролируем наличие значения #define wxUSE_GUI 1
-
В строке 1642 значение #define wxUSE_GRAPHICS_DIRECT2D 0 меняем на #define wxUSE_GRAPHICS_DIRECT2D 1
Без этих опций при сборке проекта CodeBlocks из исходников компилятор будет выдавать предупреждающие сообщения и останавливать процесс. В результате мне пришлось несколько раз возвращаться и повторно собирать wxWidgets с измененными настройками setup.h. А как Вы помните, это процесс очень не быстрый.
Сохраняем файл setup.h и копируем его из (путь_WXWIN)includewxmswsetup.h в (путь_WXWIN)includewx .
Важно: Эти два файла всегда должны быть одинаковыми.
Далее wxWidgets необходимо собрать. Существует множество вариантов и опций сборки данной библиотеки, определяющих дальнейшие варианты ее использования в проектах. Так опция MONOLITHIC определяет, будут ли при компиляции библиотеки упакованы в единый файл. Опция SHARED задает тип библиотеки: статическая или динамическая. Опция BUILD определяет, будет ли библиотека поддерживать отладку (debug/release).
Я решил собирать сразу и статические, и динамические библиотеки для debug и для release. Эта задача определила мне 4 варианта запуска процесса со следующими ключами: (SHARED=0 MONOLITHIC=1)
-
SHARED=0 BUILD=debug — статическая отладочная библиотека
-
SHARED=0 BUILD=release — статическая библиотека для релиза
-
SHARED=1 MONOLITHIC=1 BUILD=debug — единая динамическая отладочная библиотека
-
SHARED=1 MONOLITHIC=1 BUILD=release — единая динамическая библиотека для релиза
Для сборки я сделал cmd скрипт, позволяющий частично автоматизировать подготовку и запуск процесса.
cd %WXWIN%buildmsw
REM SHARED=1 - make DLL, SHARED=0 - make LIB
REM MONOLITHIC=1 - make monolithic lib/dll
REM Clean
mingw32-make -f makefile.gcc clean
mingw32-make -f makefile.gcc BUILD=debug USE_XRC=1 SHARED=0 MONOLITHIC=1 UNICODE=1 WXUNIV=0 USE_OPENGL=1 clean
mingw32-make -f makefile.gcc BUILD=debug USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 WXUNIV=0 USE_OPENGL=1 clean
mingw32-make -f makefile.gcc BUILD=release USE_XRC=1 SHARED=0 MONOLITHIC=1 UNICODE=1 WXUNIV=0 USE_OPENGL=1 clean
mingw32-make -f makefile.gcc BUILD=release USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 WXUNIV=0 USE_OPENGL=1 clean
REM Delete setup.h
if exist %WXWIN%libgcc_libmswu (rd /S/Q %WXWIN%libgcc_libmswu)
if exist %WXWIN%libgcc_libmswud (rd /S/Q %WXWIN%libgcc_libmswud)
if exist %WXWIN%libgcc_dllmswu (rd /S/Q %WXWIN%libgcc_dllmswu)
if exist %WXWIN%libgcc_dllmswud (rd /S/Q %WXWIN%libgcc_dllmswud)
REM Build
start cmd /k "mingw32-make -f makefile.gcc BUILD=debug USE_XRC=1 SHARED=0 MONOLITHIC=1 UNICODE=1 WXUNIV=0"
start cmd /k "mingw32-make -f makefile.gcc BUILD=debug USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 WXUNIV=0"
start cmd /k "mingw32-make -f makefile.gcc BUILD=release USE_XRC=1 SHARED=0 MONOLITHIC=1 UNICODE=1 WXUNIV=0"
start cmd /k "mingw32-make -f makefile.gcc BUILD=release USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 WXUNIV=0"
Сначала выполняется очистка результатов предыдущих попыток и удаляются каталоги с присутствующим файлом настроек setup.h, который при его отсутствии копируется из (путь_WXWIN)includewx . Удаление каталогов с данным файлом необходимо на случай его изменения. Так актуальный файл гарантированно будет скопирован в нужные каталоги при сборке. Сборка запускается в 4х независимых cmd процессах, что позволяет несколько полнее загрузить процессор (если у него несколько ядер и потоков) и этим ускорить процесс. Сам процесс сборки у wxWidgets обычно происходит стабильно успешно, но занимает длительное время. У меня обычно на это уходит до 3х часов. В итоге в папке lib wxWidgets появляются две подпапки — gcc_dll и gcc_lib c полным набором релизных и отладочных библиотек. Разница в названиях таких библиотек в наличии ‘суффикса’ d в имени файла.
Дальше необходимо открыть среду CodeBlocks и в меню Settings > Global Variables добавить переменные wx, wx31, wx31_64. В наборе данных указывается полные пути к папке wxWidgets, вложенным папкам include и lib:
-
base = C:codeblockswxWidgets-3.1.5
-
include = C:codeblockswxWidgets-3.1.5include
-
lib = C:codeblockswxWidgets-3.1.5lib
Глобальный путь lib указываем к папке со статически линкуемым набором библиотек.
В принципе среда CodeBlocks может и сама запрашивать глобальные переменные, если такие встречаются в проекте.
Теперь можно попробовать собрать тестовый wxWidgets проект, чтобы убедиться, что все сделано правильно. В опциях при создании проекта выбираем wxWidgets 3.1.x (wxSmith, Frame Based). В процессе работы мастера проекта можно увидеть применение уже созданной переменной wx на странице, где требуется указать расположение wxWidgets. Здесь ничего менять не надо, т.к. нужные настройки уже существуют.
Далее нужно отметить сборку проекта Monolithic, т.к. наша библиотека wxWidgets собиралась именно с такой опцией. Также необходима опция Enable unicode.
После успешной проверки сборки WX проекта можно переходить непосредственно к сборке CodeBlocks из исходников.
Сборка CodeBlocks
Сначала я взял исходники codeblocks с сайта проекта, и пытался собрать их. На борьбу с разными ошибками и зависимостями ушло несколько дней, пока я не встретил на одном из сайтов рекомендацию брать исходники из SVN репозитория проекта.
Замечание: Исходники CodeBlocks для сборки скачивайте из SVN репозитория проекта.
Для этого я установил программу TortoiseSVN-1.14.1.29085-x64-svn-1.14.1, и с ее помощью подключился к источнику svn://svn.code.sf.net/p/codeblocks/code/trunk , и после обновления данных выполнил экспорт ветки в локальную папку проектов.
Теперь у нас есть актуальные исходники проекта codeblocks для сборки.
Для работы скриптов при сборке проекта codeblocks необходимо наличие в системе доступной для запуска из консоли утилиты Zip. У кого такой утилиты нет, ее можно скачать и установить из источника, прописав в системной переменной Path путь к исполняемому файлу. Утилита должна находиться и выполняться из cmd.
Запускаем установленную ранее IDE CodeBlocks, открываем проект CodeBlocks_wx31_64.workspace из папки C:codebloclscodeblockssrc . Как видно, проект ориентирован на сборку с wxWidgets 3.1.x и x64. В папке присутствуют и другие проекты, но использованный мной компилятор изначально собирает проекты под 64-битную ОС.
Важно: Изначальный выбор компилятора для сборки wxWidgets определяет тип проекта (х32/х64), выбираемого для сборки codeblocks из исходников. Иначе на финальном этапе не будут находиться те или иные библиотеки. Либо даже после успешной сборке проекта codeblocks при его запуске будет появляться сообщение об ошибке с дальнейшим падением IDE.
На понимание этих тривиальных фактов и исправление у меня ушло пару дней (и опять не одна пересборка wxWidgets).
При открытии проекта IDE нашла и запросила очередную глобальную переменную cb_release_type. Это флаг типа сборки, в поле base вводим -g для сборки с отладочной информацией (либо -O2 для релизной сборки с оптимизацией), и закрываем окно.
В списке проектов находим NassiShneiderman wx3.1.x . Его необходимо отключить, т.к. он требует зависимости, решения к которым я пока не нашел. Отключаем в меню Properties данного проекта на вкладке Build target . Во всплывающем списке Platform нужно снять галку с Windows и поставить на Unix или Mac. После этого данный проект будет исключен из списка компиляции. Среда CodeBlocks при этом может внезапно обнаружить глобальную переменную boost. Оставляем ее как есть (invalid).
Запускаем сборку всего Workspace и ждем ее окончания. После окончания сборки текущий Workspace можно закрыть.
Теперь необходимо запустить скрипт Update31_64.bat из папки проекта codeblocks. Переходим в папку C:codeblockscodeblockssrc и запускаем данный скрипт. Происходит магические действия по подготовке и упаковке бинарников собранного ранее проекта.
После этого копируем библиотеку wxmsw315u_gcc_custom.dll из папки C:codeblockswxwidgets-3.1.5libgcc_dll в папку C:codeblockscodeblockssrcdevel31_64. Закрываем открытую ранее IDE CodeBlocks и пробуем запустить файл codeblocks.exe из C:codeblockscodeblockssrcdevel31_64.
И так, кратко резюмирую основные трудности:
-
Компилятор для всех выполняемых работ должен быть один.
-
Версия компилятора должна быть актуальной и стабильной
-
Библиотека wxWidgets также должны быть актуальной.
-
Исходники codeblocks необходимо брать из репозитория.
-
Важно помнить разрядность собранных библиотек wxWidgets и выбирать соответствующий проект codeblocks.
-
Изменение системных переменных среды в загруженной IDE не обновляются, требуется ее перезапуск.
Спасибо за внимание.