我有文件夹"I2C AtMega32":

我有一个简单的Makefile:
all: main.hex program clean
main.o: main.cpp BMP280_driver-master\bmp280.c
avr-gcc -Wall -Os -mmcu=atmega32 -c $< -o $@
main.elf: main.o
avr-gcc -Wall -Os -mmcu=atmega32 -o main.elf main.o
main.hex: main.elf
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=atmega32 main.elf
program:
#program uC
.PHONY: clean
clean:
rm main.o main.elf在makefile工作期间,出现了一些错误:

为什么不起作用?
发布于 2022-05-26 17:43:26
主要问题是,看起来您正在尝试将两个不同的编译单元编译成一个对象文件。如果GCC支持这一点,我会感到惊讶,因为我以前从未见过。为每个C源文件使用gcc编译一个对象,然后为每个C++源文件编译一个带有g++的对象,然后将它们链接到一起。
还请注意,$<只是第一个先决条件(main.cpp)的名称,因此您甚至从未试图编译bmp280代码。当您想调试构建时,请注意Makefile正在运行的命令。
顺便说一句,all目标应该只是构建你的HEX文件。您可以分别运行make program或make clean来执行这些任务,program目标当然应该依赖于main.hex。
https://stackoverflow.com/questions/72393844
复制相似问题