最速avr-gccメモ

$ avr-g++ -g -Wall -O2 -DF_CPU=16000000 -mmcu=atmega328p -c main.cpp
$ avr-g++ -g -Wall -O2 -DF_CPU=16000000 -mmcu=atmega328p -c pwm.cpp
$ avr-g++ -g -Wall -O2 -DF_CPU=16000000 -mmcu=atmega328p -o main.elf pwm.o main.o
$ avr-objcopy -O ihex main.elf main.hex
$ avrdude -c arduino -p atmega328p -P /dev/tty.usb* -U flash:w:main.hex:i

Makefileを書いた。
サフィックスルール:main.oがない場合、〜〜.oを見に行く。この場合.cpp.oが見つかる。
.cpp.oは、cppからoを作ることを意味する。
自動変数の使い方。$<で依存ファイルの先頭のファイルを取得。この場合は.cpp→.oなので
ターゲットhoge.o→依存ファイルhoge.cppを見に行く。
$@でターゲット名を取得。
-cフラグはリンカを起動しないオプション。

COMPILE = avr-g++ -g -Wall -O2 -DF_CPU=16000000 -mmcu=atmega328p
OBJECTS = main.o pwm.o
AVRDUDE = avrdude -c arduino -p atmega328p -P /dev/tty.usb* -U flash:w:main.hex:i

all: main.hex

main.hex: main.elf
    rm -f main.hex
    avr-objcopy -O ihex main.elf main.hex
    avr-size --format=avr --mcu=atmega328p main.elf

main.elf: $(OBJECTS)
    $(COMPILE) -o main.elf $(OBJECTS)

.cpp.o:
    $(COMPILE) -c $< -o $@

flash:
    $(AVRDUDE)

.PHONY: clean
clean:
    rm main.hex main.elf $(OBJECTS)