Steve August 17, 2020
use-gnu-on-windows-with-mingw

If you’re a hacker running Windows, you don’t need a proprietary application to compile code. With the Minimalist GNU for Windows (MinGW) project, you can download and install the GNU Compiler Collection (GCC) along with several other essential GNU components to enable GNU Autotools on your Windows computer.

Install MinGW

The easiest way to install MinGW is through mingw-get, a graphical user interface (GUI) application that helps you select which components to install and keep them up to date. To run it, download mingw-get-setup.exe from the project’s host. Install it as you would any other EXE file by clicking through the installation wizard to completion.

Install GCC on Windows

So far, you’ve only installed an installer—or more accurately, a dedicated package manager called mingw-get. Launch mingw-get to select which MinGW project applications you want to install on your computer.

First, select mingw-get from your application menu to launch it.

To install GCC, click the GCC and G++ package to mark GNU C and C++ compiler for installation. To complete the process, select Apply Changes from the Installation menu in the top-left corner of the mingw-get window.

Once GCC is installed, you can run it from PowerShell using its full path:

PS> C:MinGWbingcc.exe --version

gcc.exe (MinGW.org GCC Build-x) x.y.z

Copyright (C) 2019 Free Software Foundation, Inc.

Run Bash on Windows

While it calls itself “minimalist,” MinGW also provides an optional Bourne shell command-line interpreter called MSYS (which stands for Minimal System). It’s an alternative to Microsoft’s cmd.exe and PowerShell, and it defaults to Bash. Aside from being one of the (justifiably) most popular shells, Bash is useful when porting open source applications to the Windows platform because many open source projects assume a POSIX environment.

You can install MSYS from the mingw-get GUI or from within PowerShell:

PS> mingw-get install msys

To try out Bash, launch it using its full path:

PS> C:MinGWmsys/1.0/bin/bash.exe

bash.exe-$ echo $0

"C:MinGWmsys/1.0/bin/bash.exe"

Set the path on Windows

You probably don’t want to have to type the full path for every command you want to use. Add the directory containing your new GNU executables to your path in Windows. There are two root directories of executables to add: one for MinGW (including GCC and its related toolchain) and another for MSYS (including Bash and many common tools from the GNU and BSD projects).

To modify your environment in Windows, click on the application menu and type env.

A Preferences window will open; click the Environment variables button located near the bottom of the window.

In the Environment variables window, double-click the Path selection from the bottom panel.

In the Edit Environment variables window that appears, click the New button on the right. Create a new entry reading C:MinCWmsys1.0bin and click OK. Create a second new entry the same way, this one reading C:MinGWbin, and click OK.

Accept these changes in each Preferences window. You can reboot your computer to ensure the new variables are detected by all applications, or just relaunch your PowerShell window.

From now on, you can call any MinGW command without specifying the full path, because the full path is in the %PATH% environment variable of your Windows system, which PowerShell inherits.

Hello world

You’re all set up now, so put your new MinGW system to a small test. If you’re a Vim user, launch it, and enter this obligatory “hello world” code:

#include

#include

using namespace std;

int main() {

  cout << "Hello open source." << endl;

  return 0;

}

Save the file as hello.cpp, then compile it with the C++ component of GCC:

PS> gcc hello.cpp --output hello

And, finally, run it:

PS> .a.exe

Hello open source.

PS>

There’s much more to MinGW than what I can cover here. After all, MinGW opens a whole world of open source and potential for custom code, so take advantage of it. For a wider world of open source, you can also give Linux a try. You’ll be amazed at what’s possible when all limits are removed. But in the meantime, give MinGW a try and enjoy the freedom of the GNU.

Read More