$ 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)