Это ничем не отличается от работы с Make и любой другой формой GCC. Просто установите переменную CC и CFLAGS соответственно и работайте как обычно.
Например, я только что выбил это:
CC=avr-gcc
OBJCOPY=avr-objcopy
CFLAGS=-Os -DF_CPU=16000000UL -mmcu=atmega328p
PORT=/dev/ttyACM0
led.hex: led.elf
${OBJCOPY} -O ihex -R .eeprom led.elf led.hex
led.elf: led.o
${CC} -o led.elf led.o
install: led.hex
avrdude -F -V -c arduino -p ATMEGA328P -P ${PORT} -b 115200 -U flash:w:led.hex
Это говорит о том, что любая автоматическая компиляция C будет выполняться с помощью avr-gcc и флагов, указанных в CFLAGS. По умолчанию он создает шестнадцатеричный файл, используя OBJCOPY, для которого задано значение avr, которое зависит от файла led.elf, поэтому для получения этого файла запускается цель led.elf, которая связывает объектный файл led.o с библиотеки по умолчанию, использующие то, что было установлено в CC. Для этого ему нужен led.o, и он делает это автоматически, используя программу, указанную в CC, и флаги в CFLAGS. Вы можете затем , необязательно в make install
которой будет работать , avrdude
чтобы установить шестнадцатеричный файл в чип.
Вы можете сделать его еще более общим, чтобы скопировать его в другие проекты и внести минимальные необходимые изменения:
BIN=led
OBJS=led.o test.o
CC=avr-gcc
OBJCOPY=avr-objcopy
CFLAGS=-Os -DF_CPU=16000000UL -mmcu=atmega328p
PORT=/dev/ttyACM0
${BIN}.hex: ${BIN}.elf
${OBJCOPY} -O ihex -R .eeprom $< $@
${BIN}.elf: ${OBJS}
${CC} -o $@ $^
install: ${BIN}.hex
avrdude -F -V -c arduino -p ATMEGA328P -P ${PORT} -b 115200 -U flash:w:$<
clean:
rm -f ${BIN}.elf ${BIN}.hex ${OBJS}
Это использует "автоматические переменные" и простую замену имени. BIN
содержит «базу» ваших двоичных файлов, OBJS
содержит список объектных файлов. $ @ - имя текущей цели, $ <- имя первой предпосылки, а $ ^ - список всех предпосылок. Просто переоденься BIN
и OBJS
подойдет. В качестве бонуса я добавил, make clean
чтобы удалить скомпилированные файлы и просто оставить вас с источником.
-I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard
и связывать с нимlibcore.a
. :-)