Arduino IDE'yi yüklemek zorunda kalmadan bunu oldukça kolaylaştıran özel bir yapı sistemi (Ruby kullanarak) ile küçük bir proje oluşturdum. Temel olarak, Arduino kitaplıklarını derlemeyi son derece kolay hale getirmek için bir Makefile şablonu ve yakut bir komut dosyası kullanır. Bunu https://github.com/Earlz/make-wiring adresinde görebilirsiniz.
Ancak, kendi cevabınızı almakla ilgili bilgi için eski cevabı burada bırakıyorum. Yine de oldukça hantal ve sinir bozucu:
Talimatlar:
- Arduino IDE kaynak kodunun bir kopyasını indirin
- İçeriğini
hardware/arduino/cores/arduino
arduino_build olarak adlandıracağım yeni bir dizine kopyala
- Kopya
pins_arduino.h
Arduino varyant gelen sizindir hangisi dosyayı hardware/arduino/variants
arduino_build için (eğer emin değilseniz onay boards.txt)
- Bu makefile'ı arduino_build'e ekleyin:
.
#BSD licensed, see http://lastyearswishes.com/static/Makefile for full license
HDRS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h new.h pins_arduino.h Platform.h Printable.h Print.h \
Server.h Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h wiring_private.h WString.h
OBJS = WInterrupts.o wiring_analog.o wiring.o wiring_digital.o wiring_pulse.o wiring_shift.o CDC.o HardwareSerial.o \
HID.o IPAddress.o main.o new.o Print.o Stream.o Tone.o USBCore.o WMath.o WString.o
#may need to adjust -mmcu if you have an older atmega168
#may also need to adjust F_CPU if your clock isn't set to 16Mhz
CFLAGS = -I./ -std=gnu99 -DF_CPU=16000000UL -Os -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -mmcu=atmega328p
CC=avr-gcc
CPP=avr-g++
AR=avr-ar
default: libarduino.a
libarduino.a: ${OBJS}
${AR} crs libarduino.a $(OBJS)
.c.o: ${HDRS}
${CC} ${CFLAGS} -c $*.c
.cpp.o: ${HDRS}
${CPP} ${CPPFLAGS} -c $*.cpp
clean:
rm -f ${OBJS} core a.out errs
install: libarduino.a
mkdir -p ${PREFIX}/lib
mkdir -p ${PREFIX}/include
cp *.h ${PREFIX}/include
cp *.a ${PREFIX}/lib
Ve sonra sadece koş
make
make install PREFIX=/usr/arduino (or whatever)
Ve sonra derlenmiş kitaplıklardan yararlanmak ve böyle basit bir makefile kullanabilirsiniz:
default:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -larduino
avr-objcopy -O ihex -R .eeprom main.elf out.hex
upload:
avrdude -c arduino -p m328p -b 57600 -P /dev/ttyUSB0 -U flash:w:out.hex
all: default upload
Ayrıca, kitaplıkları derlemeye çalışırsanız, libraries/
işleri doğru sırada yapmazsanız bir bağlayıcı hatası alırsınız. Örneğin, SoftwareSerial'ı kullanmak için bunu yapmak zorunda kaldım:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino
-larduino
Komut satırında geçen kütüphane olmalı
Her neyse, bu benim için derlemenin oldukça kolay bir yoluydu. Ardunio'nun gelecekteki sürümleri çıktıkça, bu dosya oldukça geleceğe dönük olmalı ve OBJS ve HDRS'de sadece birkaç değişiklik gerektiriyor. Ayrıca, bu makefile hem BSD markası hem de GNU markasıyla çalışmalıdır.
Ayrıca benim bu cevabın biraz değiştirilmiş halini görmek blogda bir ile zaten derlenmiş ikili ( "standart" pins_arduino.h kullanılarak derlenmiş) kütüphanenin.
** DÜZENLE **
Aşağıdaki derleyici optimizasyon bayraklarının hem Makefile kütüphane binasına hem de her bir proje Makefile'ye eklenmesinin, derlenmiş son ikiliğin boyutunu büyük ölçüde azalttığını buldum. Bu, son ikili boyutu IDE ile karşılaştırılabilir hale getirir.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
Kütüphane derlemesi makefile için:
CFLAGS = -I./ -std=gnu99 -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p
ve her bir proje markası için:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections -fdata-sections -mmcu=atmega328p -o main.elf main.c -larduino
.
Ref: http://arduino.cc/forum/index.php?topic=153186.0