This is an old question, but none of the anycodings_windows answers here provide enough context for anycodings_windows a beginner to choose which one to pick.
What is make?
make is a traditional Unix utility which anycodings_windows reads a Makefile to decide what programs anycodings_windows to run to reach a particular goal. anycodings_windows Typically, that goal is to build a piece anycodings_windows of software from a set of source files anycodings_windows and libraries; but make is general anycodings_windows enough to be used for various other anycodings_windows tasks, too, like assembling a PDF from a anycodings_windows collection of TeX source files, or anycodings_windows retrieving the newest versions of each anycodings_windows of a list of web pages.
Besides encapsulating the steps to reach anycodings_windows an individual target, make reduces anycodings_windows processing time by avoiding to anycodings_windows re-execute steps which are already anycodings_windows complete. It does this by comparing time anycodings_windows stamps between dependencies; if A anycodings_windows depends on B but A already exists and is anycodings_windows newer than B, there is no need to make anycodings_windows A. Of course, in order for this to work anycodings_windows properly, the Makefile needs to document anycodings_windows all such dependencies.
Notice that the indentation needs to anycodings_windows consist of a literal tab character. This anycodings_windows is a common beginner mistake.
Common Versions of make
The original make was rather pedestrian. anycodings_windows Its lineage continues to this day into anycodings_windows BSD make, from which nmake is derived. anycodings_windows Roughly speaking, this version provides anycodings_windows the make functionality defined by POSIX, anycodings_windows with a few minor enhancements and anycodings_windows variations.
GNU make, by contrast, significantly anycodings_windows extends the formalism, to the point anycodings_windows where a GNU Makefile is unlikely to work anycodings_windows with other versions (or occasionally anycodings_windows even older versions of GNU make). There anycodings_windows is a convention to call such files anycodings_windows GNUmakefile instead of Makefile, but anycodings_windows this convention is widely ignored, anycodings_windows especially on platforms like Linux where anycodings_windows GNU make is the de facto standard make.
Telltale signs that a Makefile uses GNU anycodings_windows make conventions are the use of := anycodings_windows instead of = for variable assignments anycodings_windows (though this is not exclusively a GNU anycodings_windows feature) and a plethora of functions anycodings_windows like $(shell ...), $(foreach ...), anycodings_windows $(patsubst ...) etc.
So Which Do I Need?
Well, it really depends on what you are anycodings_windows hoping to accomplish.
If the software you are hoping to build anycodings_windows has a vcproj file or similar, you anycodings_windows probably want to use that instead, and anycodings_windows not try to use make at all.
In the general case, MinGW make is a anycodings_windows Windows port of GNU make for Windows, It anycodings_windows should generally cope with any Makefile anycodings_windows you throw at it.
If you know the software was written to anycodings_windows use nmake and you already have it anycodings_windows installed, or it is easy for you to anycodings_windows obtain, maybe go with that.
You should understand that if the anycodings_windows software was not written for, or anycodings_windows explicitly ported to, Windows, it is anycodings_windows unlikely to compile without significant anycodings_windows modifications. In this scenario, getting anycodings_windows make to run is the least of your anycodings_windows problems, and you will need a good anycodings_windows understanding of the differences between anycodings_windows the original platform and Windows to anycodings_windows have a chance of pulling it off anycodings_windows yourself.
In some more detail, if the Makefile anycodings_windows contains Unix commands like grep or curl anycodings_windows or yacc then your system needs to have anycodings_windows those commands installed, too. But quite anycodings_windows apart from that, C or C++ (or more anycodings_windows generally, source code in any language) anycodings_windows which was written for a different anycodings_windows platform might simply not work - at all, anycodings_windows or as expected (which is often worse) - anycodings_windows on Windows.