Whether you compile manually with a Makefile (or Arduino-Builder) or in the IDE, the end result is a HEX file. This is a text file describing the data to load into the flash memory.
You then use avrdude to install it into the Arduino - either from the IDE or by running it manually (or specifying it in your Makefile, etc).
A Makefile doesn't produce an executable. A Makefile is merely a recipe - a set of instructions - telling the make program which programs to run (gcc, avr-ggcgcc, etc) and in what order (and with what flags) to compile your code.
There are many Arduino Makefile projects out there that do it all for you.