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を使用して16進数ファイルを作成します。これはavrファイルに設定されており、ファイルled.elfに依存しています。このファイルを取得するには、オブジェクトファイルled.oをリンクするled.elfターゲットを実行します。 CCで設定されたものを使用するデフォルトのライブラリ。そのためにはled.oが必要であり、CCで指定されたプログラムとCFLAGSのフラグを自動的に使用してそれを行います。次に、オプションmake install
でを実行avrdude
して、hexファイルをチップにインストールします。
さらに汎用的にして、他のプロジェクトにコピーして、必要な最小限の変更を加えることができます。
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
。:-)