Makfile,对'main'

时间:2016-03-15 21:41:58

标签: makefile avr-gcc

我正在为AVR项目编写我的第一个Makefile并遇到了一些问题。第一次执行“make”但是吐出所有目标文件和main.map文件时,它会说“对'main'的未定义引用”。下次执行“make”时,它会完成编译,并且还会发出main.elf和main.hex文件。

正如我所提到的,我是新手,但有些东西告诉我这是一个链接问题。我搜索了类似的帖子,但没有找到任何解决方案,所以任何帮助表示赞赏。

我有一个项目文件夹,其中包含Makefile,在项目文件夹中有一个src文件夹,并且存在.c文件和.h所在的头文件夹。

以下是 Makefile

SOURCE_FILES=$(wildcard src/*)
OBJECT_FILES=$(patsubst %.c,%.o,$(SOURCE_FILES))
INCLUDE_PATH=headers/
MCU=atmega328p
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues

hex : elf
    avr-size main.elf
    avr-objcopy -R .eeprom -O ihex main.elf main.hex


elf : object
    avr-gcc $(CFLAGS) -o main.elf -Wl,-Map,main.map $(wildcard *.o)


object : $(SOURCE_FILES)
    avr-gcc $(CFLAGS) -Os -c $(SOURCE_FILES) -I$(INCLUDE_PATH)


load: main.hex
    avrdude -c arduino -p m328p -P /dev/ttyACM0 -D -U flash:w:main.hex

clean:
    rm *.o *.hex *.map *.elf

修改

第一次之后的输出:

avr-gcc -g -mmcu=atmega328p -Wall -Wstrict-prototypes -Os -mcall-prologues -o main.elf -Wl,-Map,main.map

/usr/lib/gcc/avr/4.8.2/../../../avr/lib/avr5/crtm328p.o: In function `__bad_interrupt':
../../../../crt1/gcrt1.S:195: undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [elf] Error 1

之后的输出:

avr-gcc -g -mmcu=atmega328p -Wall -Wstrict-prototypes -Os -mcall-prologues -o main.elf -Wl,-Map,main.map Car.o main.o TinyTimber.o
avr-size main.elf
text       data     bss     dec     hex filename
7046          8     855    7909    1ee5 main.elf
avr-objcopy -R .eeprom -O ihex main.elf main.hex

0 个答案:

没有答案