Ich habe ein kleines Projekt mit einem benutzerdefinierten Build-System (mit Ruby) erstellt, das dies ziemlich einfach macht, ohne die Arduino IDE installieren zu müssen. Grundsätzlich werden eine Vorlage Makefile und ein Ruby-Skript verwendet, um das Kompilieren der Arduino-Bibliotheken extrem einfach zu machen. Sie können es unter https://github.com/Earlz/make-wiring sehen
Ich lasse jedoch die alte Antwort hier, um Informationen zum Rollen Ihrer eigenen zu erhalten. Es ist allerdings ziemlich umständlich und nervig:
Richtungen:
- Laden Sie eine Kopie des Arduino IDE-Quellcodes herunter
- Kopieren Sie den Inhalt von
hardware/arduino/cores/arduino
in ein neues Verzeichnis, das ich als arduino_build bezeichnen werde
- Kopieren Sie die
pins_arduino.h
Datei aus der Arduino-Variante hardware/arduino/variants
(überprüfen Sie board.txt, wenn Sie sich nicht sicher sind) nach arduino_build
- Fügen Sie dieses Makefile zu arduino_build hinzu:
.
#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
Und dann einfach rennen
make
make install PREFIX=/usr/arduino (or whatever)
Und um dann die kompilierten Bibliotheken und dergleichen zu nutzen, können Sie ein einfaches Makefile wie das folgende verwenden:
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
Wenn Sie versuchen, die Bibliotheken in zu kompilieren libraries/
, wird ein Linkerfehler angezeigt, wenn Sie die Dinge nicht in der richtigen Reihenfolge ausführen. Zum Beispiel musste ich dies tun, um SoftwareSerial zu verwenden:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino
Dies -larduino
muss die letzte Bibliothek in der Befehlszeile sein
Auf jeden Fall war dies eine ziemlich einfache Möglichkeit, es für mich zu kompilieren. Wenn zukünftige Versionen des Ardunio herauskommen, sollte dieses Makefile ziemlich zukunftssicher sein und nur wenige Änderungen an OBJS und HDRS erfordern. Außerdem sollte dieses Makefile sowohl mit BSD make als auch mit GNU make funktionieren
Siehe auch eine leicht modifizierte Version dieser Antwort in meinem Blog mit einer bereits kompilierten Binärdatei der Bibliothek (kompiliert mit dem "Standard" pins_arduino.h).
** BEARBEITEN **
Ich fand heraus, dass das Hinzufügen der folgenden Compiler-Optimierungsflags sowohl zum Makefile der Bibliothekserstellung als auch zu jedem einzelnen Projekt-Makefile die Größe der endgültigen kompilierten Binärdatei erheblich reduziert. Dies macht die endgültige Binärgröße vergleichbar mit der der IDE.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
Also, für das Makefile zum Erstellen der Bibliothek:
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
und für jedes Projekt-Makefile:
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