avr-gcc -D игнорируется
Я пытаюсь использовать XCode для компиляции программы avr с библиотеками arduino, но мне кажется, что что-то не так с моим Makefile, потому что он выдает мне предупреждения вроде
# warning "F_CPU not defined for <util/delay.h>"
но я использую -D в CC и CXX, которые должны определять то, что я думал, вот мой Makefile:
TARGET = firmware
MCU = atmega32u4
F_CPU = 16000000L
USB_VID = 0x2a03
USB_PID = 0x8036
USB_PRODUCT = "USB Device"
USB_MANUFACTURER = "Unknown"
ARDUINO_VERSION = 107010
CC =
CXX = avr-g++
AR = avr-ar
COPY = avr-objcopy
SIZE = avr-size
DUDE = avrdude
CFLAGS = -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=$(USB_VID) -DUSB_PID=$(USB_PID) -DUSB_MANUFACTURER=$(USB_MANUFACTURER) -DUSB_PRODUCT=$(USB_PRODUCT)
CXXFLAGS = -c -g -Os -w -fno-exceptions -fno-threadsafe-statics -MMD -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=$(USB_VID) -DUSB_PID=$(USB_PID) -DUSB_MANUFACTURER=$(USB_MANUFACTURER) -DUSB_PRODUCT=$(USB_PRODUCT)
all: compile
compile:
$(shell $(CXX) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo src/program.cpp -o build/program.cpp.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/hooks.c -o build/hooks.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/WInterrupts.c -o build/WInterrupts.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/wiring.c -o build/wiring.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/wiring_analog.c -o build/wiring_analog.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/wiring_digital.c -o build/wiring_digital.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/wiring_pulse.c -o build/wiring_pulse.c.o)
$(shell $(CC) $(CFLAGS) -I arduino -I arduino/variants/leonardo arduino/wiring_shift.c -o build/wiring_shift.c.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/abi.cpp -o build/abi.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/CDC.cpp -o build/CDC.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HardwareSerial.cpp -o build/HardwareSerial.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HardwareSerial0.cpp -o build/HardwareSerial0.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HardwareSerial1.cpp -o build/HardwareSerial1.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HardwareSerial2.cpp -o build/HardwareSerial2.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HardwareSerial3.cpp -o build/HardwareSerial3.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/HID.cpp -o build/HID.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/IPAddress.cpp -o build/IPAddress.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/main.cpp -o build/main.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/new.cpp -o build/new.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/Print.cpp -o build/Print.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/Stream.cpp -o build/Stream.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/Tone.cpp -o build/Tone.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/USBCore.cpp -o build/USBCore.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/WMath.cpp -o build/WMath.cpp.o)
$(shell $(CPP) $(CPPFLAGS) -I arduino -I arduino/variants/leonardo arduino/WString.cpp -o build/WString.cpp.o)
$(shell $(AR) rcs build/core.a build/hooks.c.o)
$(shell $(AR) rcs build/core.a build/WInterrupts.c.o)
$(shell $(AR) rcs build/core.a build/wiring.c.o)
$(shell $(AR) rcs build/core.a build/wiring_analog.c.o)
$(shell $(AR) rcs build/core.a build/wiring_digital.c.o)
$(shell $(AR) rcs build/core.a build/wiring_pulse.c.o)
$(shell $(AR) rcs build/core.a build/wiring_shift.c.o)
$(shell $(AR) rcs build/core.a build/abi.cpp.o)
$(shell $(AR) rcs build/core.a build/CDC.cpp.o)
$(shell $(AR) rcs build/core.a build/HardwareSerial.cpp.o)
$(shell $(AR) rcs build/core.a build/HardwareSerial0.cpp.o)
$(shell $(AR) rcs build/core.a build/HardwareSerial1.cpp.o)
$(shell $(AR) rcs build/core.a build/HardwareSerial2.cpp.o)
$(shell $(AR) rcs build/core.a build/HardwareSerial3.cpp.o)
$(shell $(AR) rcs build/core.a build/HID.cpp.o)
$(shell $(AR) rcs build/core.a build/IPAddress.cpp.o)
$(shell $(AR) rcs build/core.a build/main.cpp.o)
$(shell $(AR) rcs build/core.a build/new.cpp.o)
$(shell $(AR) rcs build/core.a build/Print.cpp.o)
$(shell $(AR) rcs build/core.a build/Stream.cpp.o)
$(shell $(AR) rcs build/core.a build/Tone.cpp.o)
$(shell $(AR) rcs build/core.a build/USBCore.cpp.o)
$(shell $(AR) rcs build/core.a build/WMath.cpp.o)
$(shell $(AR) rcs build/core.a build/WString.cpp.o)
$(shell $(CC) -w -Os -Wl,--gc-sections -mmcu=$(MCU) -o build/program.cpp.elf build/program.cpp.o build/core.a -Lbuild -lm)
$(shell $(COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 build/program.cpp.elf build/program.cpp.eep)
$(shell $(COPY) -O ihex -R .eeprom build/program.cpp.elf build/program.cpp.hex)
$(TARGET).bin: compile
$(shell $(COPY) -O binary build/program.cpp.elf $(TARGET).bin)
clean:
@user840250, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 2
Вы используете $(CPPFLAGS)
для файлов *.cpp
, но определены только $(CXXFLAGS)
.
Это должно быть очевидно из командной строки (если вы включите отображение выполненных команд для make
)
А также:
CC =
- снова используется
$(CPP)
, определяется только$(CXX)
И не забывайте, что в Makefile нужны вкладки для отступов целевых команд (здесь у вас есть четыре пробела, но их можно просто заменить на SE)
,
@KIIV
о... кажется, мне нужно немного поспать :) спасибо., @user840250
Смотрите также:
- программирование ардуино на чистом с
- AVR-GCC не может вызвать функцию, расположенную по фиксированному адресу
- Как создать и загрузить программу на C++ без библиотеки Arduino или IDE?
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
- avr/io.h ошибка "No such file or directory" при компиляции с использованием avr-gcc
- Как включить библиотеки Arduino с помощью AVR-gcc без IDE?
- Установка timer3 в режиме CTC - конфликт с сервобиблиотекой
Где вы прочитали, что хотите использовать
$(shell...)
для всех команд?, @Ignacio Vazquez-Abramsнайдено в Интернете, XCode показывает ошибку «*** отсутствует разделитель. Стоп», если я не использую оболочку, @user840250
@user840250 user840250 У вас есть вкладки в качестве отступов? Четыре пробела не будут работать в Makefile., @KIIV
Вы путаете CPP (препроцессор C, avr-cpp при вызове из avr-gcc или avr-g++) с CXX (avr-g++) с катастрофическими результатами., @Majenko