Hello!
I wanted to learn GUI rpogramming in C++. One of the main libraries for this purpose is called wxWidgets. It's very popular and seem powerful enough to make even a complex graphical interface. I also liked the fact that it's multi platforms.
I am on Windows, using MingW and I like coding with VS Code. I also like having a clear Makefile to generate my programs. So here is how I have managed to compile the Hello World program you can find on the wxWidgets website.
First, go to their github repository and clone it in a folder you will keep on your computer.
In the root directory, run the command git submodule update --init. If the clone operation has not done so already, this command will pull additional repositories needed by wxWidget.
Go to build\msw.
Run the command: mingw32-make -f makefile.gcc -j4 SHARED=1 UNICODE=1 BUILD=debug clean.
It will delete any unwanted file.
Once it's done, re run the command but without the clean instruction. This will build the library from the source. This way you can control exactly which version you want.
During the build process, I got some errors regarding c:\mingw\lib\bfd-plugins\libdep.a. As far as I understood the bug reports on this error, it will not affect the resulting build. In my case, it did not prevent the Hello World program from running. I am not sure if more advanced features will be an issue because of it. Anyway, in the context of this article, just click the ok button to dismiss the error.
It will take a little while. Like, around 15 minutes.
Once it's done, you should find inside of the git repository:
An include folder, which contains the header files.
A lib folder, which contains the library files and the dll.
Alright, now, we have all we need, and it's just a matter of linking the correct folders in the Makefile.
For the includes, you will need:
- -IC:\path_to_git_repo\include
- -IC:\path_to_git_repo\lib\gcc_dll\mswud (this one is because there is a setup.h inside)
For the linkers, you will need:
- -LC:\path_to_git_repo\lib\gcc_dll
- -lwxmsw31ud_core -lwxbase31ud
Copy the corresponding dlls in the folder where your Makefile will generate your executable. The dlls names are:
- wxbase316ud_gcc_custom
- wxmsw316ud_core_gcc_custom
And that's it! You can now compile your program like you would normally.
Now, notice the BUILD=debug argument when we built from the source? Before sharing your GUI application with the whole world, you want to use the release version of wxWidget. To do so, you have to rebuild it by replacing BUILD=debug by BUILD=release. Once it is done, you have to include/link the same file names but without the letter d at the end (so, mswu instead of mswud, -lwxmsw31u_core instead of -lwxmsw31ud_core, etc.). The build time is even longer for the release version.
I hope it was helpful,
Have fun!
Comments
Post a Comment