Простодушный как-meataxe способ просто обернуть команды в рецепте:
.PHONY: all
all:
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c
avr-gcc -mmcu=atmega328p led.o -o led
avr-objcopy -O ihex -R .eeprom led led.hex
avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex
Просто введите make
, и он будет работать. Это работает, но это просто немой сценарий. Лучший способ, обернув каждую команду в правило, с правильными именами и предпосылках:
# I still don't know what this one does. ("flashing"?)
.PHONY: flash
flash: led.hex
avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex
led.o: led.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c
led: led.o
avr-gcc -mmcu=atmega328p led.o -o led
led.hex: led
avr-objcopy -O ihex -R .eeprom led led.hex
Это предотвратит много ненужной работы, такие как восстановление led
и led.o
, когда они уже в курсе. Мы можем улучшить его дальше, делая некоторые из этих правил в шаблонных правил, так что в дальнейшем, если вы хотите добавить servo.c
в проект вам не придется писать новые версии всего:
# Can other things "flash"? Or be "flashed"? The word has several definitions.
.PHONY: flash
flash: led.hex
avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex
%.o: %.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o [email protected] $<
%: %.o
avr-gcc -mmcu=atmega328p $< -o [email protected]
%.hex: %
avr-objcopy -O ihex -R .eeprom $< [email protected]
Дальнейшие улучшения возможны , но многое зависит от того, как вы собираетесь использовать этот make-файл и в каких направлениях вы намерены расширить проект.
Для тех из нас, кто не знаком с avr-gcc, не могли бы вы рассказать нам, что делают третья и четвертая команды? – Beta
третий делает шестнадцатеричный файл для мигания, а четвертый - мигает – connorwstein
, как в письменной форме во флеш-память на mcu – connorwstein