It's important to understand that the utility, make, is not a compiler as many people believe. It's a build tool just like MSBuild or Ant.
Make is an extraordinarily simple tool which, combined with the power of the shell, can greatly reduce the complexity of your application's build needs. Even if you're a Gulp/Grunt/Whatever fan, you should understand the power of make, as well as its shortcomings.
Make will turn one (or more) files into another file. That's the whole purpose of the tool. If you run make and your source hasn't changed, make won't build your output.
Make runs on shell commands, orchestrated using the concept of "targets".
You can follow along and read the code by using the code in this commit.