第一次写makefile心得是在九月,一转眼一个月过去了,回看一个月前我的心的看起来有些惨不忍睹,但学习嘛!就是这样。
先放近期写的makefile(用于stm32的编译、下载)
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
CFLAGS =-mthumb -mcpu=cortex-m4 -g -I /home/fxx/Desktop/Progect/Dev/ -DSTM32F40_41xxx
LDFLAGS = --static -L /usr/arm-none-eabi/lib/ -L /usr/lib/gcc/arm-none-eabi/11.2.0/
ASFLAGS = -mthumb -mcpu=cortex-m4
vpath %.c ./User
vpath %.c ./Dev
vpath %.h ./Dev
vpath %.o ./Build
TARGET =main
BUILD = BUILD
C_INCLUDE = stm32f4xx_rcc.c \
stm32f4xx_gpio.c \
system_stm32f4xx.c \
stm32f4xx_rcc.c \
delay.c \
main.c
OBJ_SOURCE = $(C_INCLUDE:%.c=%.o)
ASM_SOURCE = ./startup_stm32f40xx.s
LD_SOURCE = ./STM32F407IGHx_FLASH.ld
ASMOBJ_SOURCE =$(ASM_SOURCE:%.s=%.o)
all:$(OBJ_SOURCE) $(ASMOBJ_SOURCE)
$(LD) $(LDFLAGS) $^ -T $(LD_SOURCE) -o $(TARGET).elf
$(OBJ_SOURCE):%.o:%.c
$(CC) $(CFLAGS) -c $< -o ./Build/$@
$(ASMOBJ_SOURCE):$(ASM_SOURCE)
$(AS) $(ASFLAGS) -c $^ -o ./Build/$@
clean:
rm -rf ./Build/*.o
rm -rf ./*.elf
download:
openocd -f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f4x.cfg -c init -c halt -c "flash write_image erase /home/fxx/Desktop/Progect/main.elf" -c reset
一、近期学习回顾
先是学习了一下gcc编译器的参数,现在再使用makefile确实顺手了好多。
再就是多写makefiel文件,多运行,多找错,多百度
又系统的看了一下makefile教程(陈浩大佬编写的)。
二、现状
现在再编写makefile虽说还是有些生涩,还需要不停的翻看手册,但也比第一此发的makefile好多了(至少可以顺利编译了)。
三、存在的问题
再上面的makefile中,执行make后会出现一下报错
arm-none-eabi-ld --static -L /usr/arm-none-eabi/lib/ -L /usr/lib/gcc/arm-none-eabi/11.2.0/ ./Build/stm32f4xx_rcc.o ./Build/stm32f4xx_gpio.o ./Build/system_stm32f4xx.o delay.o main.o ./Build/startup_stm32f40xx.o -T ./STM32F407IGHx_FLASH.ld -o main.elf
arm-none-eabi-ld: cannot find delay.o: 没有那个文件或目录
arm-none-eabi-ld: cannot find main.o: 没有那个文件或目录
再次执行make后链接才会成功。具体问题我猜测应该与“vpath %.o ./Build”和编译文件没有带路径有关,我会验证后下期发。