So sieht das neue Makefile jetzt aus:
Code:
############################################################
# Projekteinstellungen
############################################################
# MCU
MCU=atmega168p
F_CPU=16000000
LFUSE=0xde
HFUSE=0xdf
EFUSE=0x01
# Die Sources
SOURCES = OBJ = main.cpp rs232.cpp parser.cpp timer1.cpp io.cpp
# Die Zieldateien
ELF = usbstepper.elf
HEX = usbstepper.hex
MAP = usbstepper.map
############################################################
# Compiler Flags. Muss vermutlich nicht angepasst werden
############################################################
CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os --std=c++11 -mcall-prologues
############################################################
# Die Toolchain. Muss vermutlich nicht angepasst werden
# Die AVRDUDE Zeile muss an den Programmer und
# die Ziel CPU angepasst werden
############################################################
AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P USB
CC=avr-g++
RM=rm -f
OBJCOPY=avr-objcopy
AVRSIZE=avr-size
OBJDUMP=avr-objdump
############################################################
# Ab hier muss nichts mehr angepasst werden
############################################################
# OBJ = Sources mit ersetzter Dateiendung
OBJ=$(SOURCES:%.cpp=%.o)
all: hex
hex: elf
$(OBJCOPY) -R .eeprom -O ihex $(ELF) $(HEX)
elf: $(OBJ)
$(CC) -mmcu=$(MCU) $(CFLAGS) -o $(ELF) -Wl,-Map,$(MAP) $(OBJ)
%.o: %.cpp
$(CC) -mmcu=$(MCU) $(CFLAGS) -c $<
.phony: flash
flash: hex
$(AVRDUDE) -e -U flash:w:$(HEX)
# Ziele ohne Abhängigkeiten
clean:
$(RM) $(OBJ) $(ELF) $(HEX) $(MAP)
readfuse:
$(AVRDUDE) lfuse:r:-:i -v
writefuse:
$(AVRDUDE) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
size: $(ELF)
$(AVRSIZE) -B $(ELF)
dump:
$(OBJDUMP) -d --demangle $(ELF)
Das ist jetzt ein einfaches klar strukturiertes makefile das auch bei "make flash" und einer geänderten Datei in SOURCES das hex file neu baut. Ist immer noch fast das selbe. Der Schritt aus den Sources die OBJ Variable zu machen.
Gruß
Georg
Lesezeichen