Table of Contents
WinBGIm is still widely used in academics to introduce the subject of Computer Graphics. However, times have changed since the library received its last update almost 18 years ago.
Let’s see how to use the library the with modern tooling.
- You have followed along the guide to create a C/C++ developement environment to the dot and have
MinGW-w64utils on the
- The original library was written in the 32-bit era. Download a 64-bit rebuild of the same from here.
- Download the
- Download the
- Choose a folder you’ll write
winbgimrelated code in and copy these files to a sub-directory named
- Ideally, the
winbgimsub-dir should further be divided into
includedirectories to store the
graphics.hrespectively. But it’s fine for now since this is for learning purposes.
- Maintaining a separate copy of external dependencies is called vendoring and it enables smoother version management and separation of concerns in bigger codebases.
- Ideally, the
- Launch Command Prompt as Admin and type in the following command:
mklink C:\mingw64\bin\make.exe C:\mingw64\bin\mingw32-make.exe
- The command creates a symbolic link which is like creating a copy of the file whose contents are always up-to-date with the contents of the original one.
- Create a new file named
Makefileinside the code folder with the following contents:
1 2 3 4 5
CC = g++ CFLAGS = -W -Wall -pedantic CPPFLAGS = -I ./winbgim LDFLAGS = -L ./winbgim LDLIBS = -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
- Fire up a new terminal (integrated or otherwise) in the same directory as this file and the code. Issue the following command to compile your programs:
- The compiled executable can be found in the same directory with the same name as the source file.
Make sure your code file’s extension is
.cpp to avoid the error
cannot open source file "sstream" (dependency of "graphics.h") if you are using VS Code.
Breaking Down Steps⌗
In steps 1 and 2, we download and place the
WinBGIm library files in our working folder.
mingw32-make is the
mingw variant of
GNU Make. Since its name is too long to type and since it’s known as
make on *—Nix systems anyways, we create a shortened symbolic link to it in the step 3.
Lastly we add a
Makefile i.e. instructions to build/compile our programs in step 4.
What are Makefiles⌗
A C program of decent size requires multiple libraries to carry out its functions. This requirement is satisfied by linking-in the libraries with the executable. It is analogous to imports in Python or Java.
There’s one caveat though. What libraries to link in, their location and in what order to link them has to be specified every time the compiler is invoked. Besides, any non-standard header files used also have to be made known to the compiler. This is where Makefiles and build-automation tools come into the pitcure. They help us avoid the manual drudgery of managing this.
GNU Make is one of them and here is its documentation.
I promise a blog post explainging build automation and Makefiles sometime in the future.
Happy Hacking ;)