一个STM32项目的makefile模版详解

本模板为STM32流水灯项目的Makefile配置文件,适用于STM32F10x系列MCU,详细说明了编译链接过程及所需工具链配置。包括编译目标、编译选项、链接脚本等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

啥都不说了,直接上代码,注释相当详细了。

#STM32 makefile template

# 生成的文件名<项目名>
PROJECT                  = stm32_Mini_Led

# 定义文件格式和文件名
TARGET                  := $(PROJECT)
TARGET_ELF              := $(TARGET).elf
TARGET_BIN              := $(TARGET).bin
TARGET_HEX              := $(TARGET).hex
OBJCPFLAGS_ELF_TO_BIN    = -Obinary
OBJCPFLAGS_ELF_TO_HEX    = -Oihex
OBJCPFLAGS_BIN_TO_HEX    = -Ibinary -Oihex

# 定义路径
TOP_DIR      = .
SCRIPT_DIR  := $(TOP_DIR)/scripts
STARTUP_DIR := $(TOP_DIR)/third_party/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup
INC_DIR     := -I $(TOP_DIR)/src -I $(TOP_DIR)/src/Driver -I $(TOP_DIR)/src/EDP -I $(TOP_DIR)/src/Network

# 设置shell环境变量
#export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/

# 设置ld链接脚本文件
LDSCRIPT    := $(SCRIPT_DIR)/stm32_flash.ld

# 定义编译工具
CC          = arm-none-eabi-gcc
AS          = arm-none-eabi-as
LD          = arm-none-eabi-ld
AR          = arm-none-eabi-ar
OBJCP       = arm-none-eabi-objcopy

# 定义编译标志
CCFLAGS     += -Wall -mcpu=cortex-m3 -mthumb -g -mfloat-abi=soft -march=armv7-m
ASFLAGS     += -Wall -mcpu=cortex-m3 -mthumb
LDFLAGS     += -T $(LDSCRIPT) #-A armv7-m
LDFLAGS     += -L /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1
LDFLAGS     += -L /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb

# 要链接的静态库
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS      += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS      += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a


# .c文件中的头文件引用查找路径
CCFLAGS     += $(INC_DIR)

# .s文件的flags
#ASFLAGS        +=

# .c文件编译时定义宏
CCFLAGS     += -D STM32F10X_MD -D USE_STDPERIPH_DRIVER

# 添加启动文件
#SOURCE         += $(SCRIPT_DIR)/startup_stm32f10x_md.c
SOURCE_ASM      += $(STARTUP_DIR)/gcc_ride7/startup_stm32f10x_md.s

# 展开工作 子目录中的inc文件(inc文件中添加需要编译链接的.c,.s等文件)
-include $(TOP_DIR)/src/make.inc
-include $(TOP_DIR)/third_party/make.inc

# 替换文件后缀
C_OBJS      := $(SOURCE:%.c=%.o)
ASM_OBJS    := $(SOURCE_ASM:%.s=%.o)

# 编译命令的定义
COMPILE     = $(CC) $(CCFLAGS) -c $< -o $@ 
ASSEMBLE    = $(AS) $(ASFLAGS) -c $< -o $@ 
LINK        = $(LD) $+ $(LDFLAGS) $(LDLIBS) -o $@ 
ELF_TO_BIN  = $(OBJCP) $(OBJCPFLAGS_ELF_TO_BIN) $< $@
BIN_TO_HEX  = $(OBJCP) $(OBJCPFLAGS_BIN_TO_HEX) $< $@ 

# 定义伪目标
.PHONY: all clean printf

# 定义规则
all: $(TARGET_HEX)
    @echo "build done"

$(TARGET_HEX): $(TARGET_BIN)
    $(BIN_TO_HEX)

$(TARGET_BIN): $(TARGET_ELF)
    $(ELF_TO_BIN)

$(TARGET_ELF): $(C_OBJS) $(ASM_OBJS)
    $(LINK)

$(C_OBJS):%.o:%.c
    $(COMPILE)

$(ASM_OBJS):%.o:%.s
    $(ASSEMBLE) 

printf:
    @echo $(ASM_OBJS)
    @echo $(ASSEMBLE)

# 清理项
clean:
    rm -f $(TARGET_HEX)
    rm -f $(TARGET_BIN)
    rm -f $(TARGET_ELF)
    rm -f $(C_OBJS) $(ASM_OBJS)
    @echo "clean done"

这个一个LED流水灯的STM32工程,包含STM32库v3.5.0版本,下载地址
再详细说一下注释中没有的可能有疑问的地方:

# 要链接的静态库
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libc.a
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libg.a
#LDLIBS         += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libm.a
#LDLIBS      += /Users/ch-yanghl/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/5.4.1/libgcc.a
#LDLIBS      += /Users/ch-yanghl/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/libnosys.a

-这一块为什么要注释:因为文中使用了

# 设置ld链接脚本文件
LDSCRIPT    := $(SCRIPT_DIR)/stm32_flash.ld
/*stm32_flash.ld文件中最后部分内容*/
/DISCARD/ :
  {
    libc.a ( * )
    libm.a ( * )
    libg.a ( * )
    libgcc.a ( * )
  }

这个ld脚本文件,该文件中已经包含了这些库。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值