Avr makefile
From Attie's Wiki
# the output binary name (found in ./bin) ELFOUT:=main.elf HEXOUT:=main.hex # the source files you wish to use (without the '.c') - main.c is added later SRCS:= # which device are you using? DEVICE:=atmega328p # what protocol do you use to communicate with the IC? AVRDUDE_PROTO:=stk500v1 #AVRDUDE_PROTO:=buspirate # which serial port is it connected to? AVRDUDE_PORT:=/dev/ttyUSB0 AVRDUDE_BAUD:=57600 ################################################################################### # There should be no need to change below here for most projects DIRS:=bin obj hex SRCS+=main OPTIMISATION:=-falign-functions \ -falign-jumps \ -falign-labels \ -falign-loops \ -fif-conversion2 \ -finline-functions \ -fregmove \ -frename-registers \ -fshort-enums \ -freorder-blocks \ -freorder-functions \ -fsplit-wide-types \ -ftoplevel-reorder \ -funroll-all-loops \ -fvariable-expansion-in-unroller CROSS_COMPILE:=avr- CC:=$(CROSS_COMPILE)gcc OBJCOPY:=$(CROSS_COMPILE)objcopy CFLAGS:=$(OPTIMISATION) -mmcu=$(DEVICE) -c -Wall -O9 CLINKS:=$(OPTIMISATION) -fwhole-program -mmcu=$(DEVICE) .PHONY: all new clean spotless .dirs upload download all: .dirs ./hex/$(HEXOUT) new: clean ./hex/$(HEXOUT) clean: rm -f *~ rm -f ./hex/$(HEXOUT) rm -f ./bin/$(ELFOUT) rm -f ./obj/*.o spotless: clean rm -rdf $(addprefix ./,$(DIRS)) .dirs .dirs: makefile mkdir -p $(addprefix ./,$(DIRS)) @touch .dirs upload: ./hex/$(HEXOUT) avrdude -c$(AVRDUDE_PROTO) -P$(AVRDUDE_PORT) -b$(AVRDUDE_BAUD) -D -Uflash:w:./hex/$(HEXOUT):a download: rm ./hex/$(HEXOUT).downloaded avrdude -c$(AVRDUDE_PROTO) -P$(AVRDUDE_PORT) -b$(AVRDUDE_BAUD) -D -Uflash:r:./hex/$(HEXOUT).downloaded:a ./hex/$(HEXOUT): ./bin/$(ELFOUT) $(OBJCOPY) -j .text -O ihex $^ $@ ./bin/$(ELFOUT): $(addprefix ./obj/,$(addsuffix .o,$(SRCS))) makefile $(CC) $(CLINKS) $(filter %.o,$^) -o $@ ./obj/%.o: %.c %.h makefile $(CC) $(CFLAGS) $*.c -o $@ ./obj/%.o: %.c makefile $(CC) $(CFLAGS) $*.c -o $@