Arduino IDE를 설치하지 않고도 이것을 쉽게 만들 수있는 사용자 정의 빌드 시스템 (Ruby를 사용)으로 작은 프로젝트를 만들었습니다. 기본적으로 템플릿 Makefile과 루비 스크립트를 사용하여 Arduino 라이브러리 컴파일을 매우 쉽게 만듭니다. https://github.com/Earlz/make-wiring 에서 볼 수 있습니다
그러나 나는 당신 자신을 굴리는 것에 대한 정보를 위해 여기에 오래된 대답을 남길 것입니다. 그래도 꽤 번거롭고 성가시다.
지도:
- Arduino IDE 소스 코드 사본 다운로드
hardware/arduino/cores/arduino
arduino_build라고하는 새 디렉토리에 내용을 복사 하십시오.
pins_arduino.h
Arduino 변형이 있는 파일 hardware/arduino/variants
(확실하지 않은 경우 boards.txt 확인)에서 arduino_build로 파일을 복사 하십시오.
- 이 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
그리고 그냥 달려
make
make install PREFIX=/usr/arduino (or whatever)
그런 다음 컴파일 된 라이브러리를 사용하기 위해 다음과 같은 간단한 makefile을 사용할 수 있습니다.
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
또한 라이브러리를 컴파일하려고 libraries/
하면 올바른 순서로 작업을 수행하지 않으면 링커 오류가 발생합니다. 예를 들어, 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
는 -larduino
명령 행의 마지막 라이브러리해야합니다
어쨌든, 이것은 나를 위해 그것을 컴파일하는 아주 쉬운 방법이었습니다. Ardunio의 향후 버전이 나오면이 makefile은 상당히 미래 지향적이어야하며 OBJS 및 HDRS를 약간만 수정하면됩니다. 또한이 makefile은 BSD make와 GNU make 모두에서 작동해야합니다.
이미 컴파일 된 이진 라이브러리 ( "standard"pins_arduino.h를 사용하여 컴파일 된) 가있는 내 블로그 에서이 답변의 약간 수정 된 버전을 참조하십시오 .
** 편집 **
라이브러리 빌드 Makefile과 각 개별 프로젝트 Makefile 모두에 다음 컴파일러 최적화 플래그를 추가하면 최종 컴파일 된 이진 파일의 크기가 크게 줄어 듭니다. 최종 바이너리 크기는 IDE 크기와 비슷합니다.
-Wl,--gc-sections -ffunction-sections -fdata-sections
.
따라서 라이브러리 빌드 makefile의 경우 :
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
그리고 각 프로젝트 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
.
참조 : http://arduino.cc/forum/index.php?topic=153186.0