C Programme bestehen in der Regel aus vielen Quelltextdateien. Der C
Compiler compiliert jede einzeln. Wenn Dein Programm auf zehn *.c
Dateien besteht, musst Du den Compiler zehn mal aufrufen. Als Ergebnis
erhälst du für jede *.c Datei eine Objektdatei *.o, die den erzeugten
Binärcode enthält. Der Linker fügt die Objekt-Dateien (und ggf. externe
Libraries) zu einem ausführbaren Programm (z.B. eine *.exe Datei)
zusammen.
Bei Mikrocontrollern erzeugt der Linker eine *.hex Datei für den
Programmieradapter.
Das Programm make hat nun die Aufgabe, den Compilier- und Link-Vorgang
zu automatisieren. Wenn Du make benutzt, brauchst Du nicht jede *.c
Datei manuell einzeln zu compilieren.
Das könnte man auch mit einer Batch Datei machen, aber die laufen nicht
unter Linux. Außerdem bringt Make den Vorteil mit, bei
Programmänderungen nur die veränderten Dateien zu compilieren.
Das "Makefile" ist eine Datei, die exakt so heissen muss. Im Makefile
steht drin, welche Quelltextdateien zum Programm gehören. Durch den
Einsatz von Make reduziert sich der Compilier- und Link-Vorgang zu einem
simplen "make" Kommando.
Das war jetzt etwas vereinfacht, sollte aber trotzdem helfen, denn Sinn
von Make zu verstehen.
Die Details entnimmst Du am Besten der Original Doku von GNU Make
(http://www.gnu.org/software/make/manual/make.html). Aber schau Dir
erstmal ein Tutorial an.
Eine Beispieldatei für AVR Projekte findest Du in meinem Buch
http://stefanfrings.de/mikrocontroller_buch/index.html Band 2.