J'ai créé un petit projet avec un système de construction personnalisé (en utilisant Ruby) qui rend cela assez facile sans avoir à installer l'IDE Arduino. Fondamentalement, il utilise un modèle Makefile et un script ruby pour rendre la compilation des bibliothèques Arduino extrêmement facile. Vous pouvez le voir sur https://github.com/Earlz/make-wiring
Cependant, je laisse l'ancienne réponse ici pour plus d'informations sur la façon de rouler la vôtre. C'est assez lourd et ennuyeux:
Instructions:
- Téléchargez une copie du code source Arduino IDE
- Copiez le contenu de
hardware/arduino/cores/arduino
dans un nouveau répertoire que j'appellerai arduino_build
- Copiez le
pins_arduino.h
fichier de la variante Arduino qui vous appartient hardware/arduino/variants
(consultez boards.txt si vous n'êtes pas sûr) dans arduino_build
- Ajoutez ce makefile à arduino_build:
.
#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
Et puis juste courir
make
make install PREFIX=/usr/arduino (or whatever)
Et puis, pour utiliser les bibliothèques compilées, vous pouvez utiliser un simple makefile comme celui-ci:
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
De plus, si vous essayez de compiler les bibliothèques dans, libraries/
vous obtiendrez une erreur de l'éditeur de liens si vous ne faites pas les choses dans le bon ordre. Par exemple, j'ai dû le faire pour utiliser SoftwareSerial:
avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino
La -larduino
doit être la dernière bibliothèque sur la ligne de commande
Quoi qu'il en soit, c'était un moyen assez facile de le compiler pour moi. À mesure que les futures versions d'Ardunio sortiront, ce makefile devrait être assez évolutif, ne nécessitant que quelques modifications à OBJS et HDRS. En outre, ce makefile devrait fonctionner avec BSD make et GNU make
Voir aussi une version légèrement modifiée de cette réponse sur mon blog avec un binaire déjà compilé de la bibliothèque (compilé en utilisant le pins_arduino.h "standard").
** MODIFIER **
J'ai trouvé que l'ajout des indicateurs d'optimisation de compilateur suivants à la fois au Makefile de création de bibliothèque et à chaque Makefile de projet individuel réduit considérablement la taille du binaire compilé final. Cela rend la taille binaire finale comparable à celle de l'IDE.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
Donc, pour le makefile de la bibliothèque:
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
et, pour chaque makefile de projet:
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
.
Réf: http://arduino.cc/forum/index.php?topic=153186.0