Makefile文件编写

这篇博客介绍了如何进行BSP工程管理实验,特别是针对ARM平台,通过Makefile文件实现LED灯的点亮。内容涉及CROSS_COMPILE变量设置、目标定义、编译器和链接器的使用,以及源文件和头文件目录的处理。实验中利用了make的patsubst、foreach等函数来自动化处理文件路径和编译过程。
摘要由CSDN通过智能技术生成

BSP工程管理实验–点亮LED灯

仅包括Makefile文件,学习正点原子代码,学习用!

CROSS_COMPILE				?= arm-linux-gnueabihf-
TARGET						?= bsp

CC 							:= $(CROSS_COMPILE)gcc  	
LD							:= $(CROSS_COMPILE)ld 
OBJCOPY						:= $(CROSS_COMPILE)objcopy 
OBJDUMP						:= $(CROSS_COMPILE)objdump 

#include director:头文件目录
INCDIRS						:=  imx6ul \
								bsp/led \
								bsp/clk \
								bsp/delay \
#source director:源文件目录
SRCDIRS						:=  project \
								bsp/led \
								bsp/clk \
								bsp/delay


#patsubst:	$(patsubst <pattern>,<replacement>,<text>)
#功能:	查找<text>中的单词是否符合模式<pattern>,如果匹配,则以<replacement>替换
#返回:函数返回被替换过后的字符串


#此处<pattern>使用通配符%,表示任意长度的字串

#给所有的头文件目录下的.h加上前缀 -I
INCLUDE 					:= $(patsubst %, -I %, $(INCDIRS))


#foreach: $(foreach <var>,<list>,<text>)
#功能 :把参数<list>中的单词逐一取出放到参数<var>所指定的变量中该,然后再执行<text>所包含的表达式
#返回:每个字符串所组成的整个字符串(以空格分隔)

#dir:$(dir<names>)
#功能:从文件名序列中取出目录部分

#wildcard:$(wildcard PATTERN)
#使用$(wildcard *.c):来获取工作目录下的所有.c文件列表

SFILES						:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES						:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))


#notdir:$(notdir<names>)
#功能:从文件名序列中取出非目录部分(最后一个反斜杠之后的部分“/”)

SFILEENDIR					:= $(notdir $(SFILES))	#start.S
CFILEENDIR					:= $(notdir $(CFILES))	#main.c bsp_led.c bsp_delay.c bsp_clk.c


#先把.S/.c文件转换成.o  然后把这些文件放到obj/目录下去
SOBJS						:= $(patsubst %, obj/%, $(SFILEENDIR:.S=.o))#obj/start.o
COBJS						:= $(patsubst %, obj/%, $(CFILEENDIR:.c=.o))
OBJS						:= $(SOBJS) $(COBJS)


#VPATH = src:.../headers		
#VPATH可以指定不同的搜索目录,如果没有定义VPATH这个变量,make就只会在当前目录下找依赖文件和目标文件
VPATH						:= $(SRCDIRS)


.PHONY: clean

$(TARGET).bin : $(OBJS)
	$(LD) -Timx6ul.lds -o $(TARGET).elf $^
	$(OBJCOPY) -O binary -S $(TARGET).elf $@
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

$(SOBJS) : obj/%.o : %.S 
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

$(COBJS) : obj/%.o : %.c
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<	


clean:
	rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)



printf:
	@echo	INCLUDE = $(INCLUDE)
	@echo	SFILES =  $(SFILES)
	@echo	CFILES =  $(CFILES)
	@echo	SFILEENDIR = $(SFILEENDIR)
	@echo	CFILEENDIR = $(CFILEENDIR)
	@echo	SOBJS = $(SOBJS)
	@echo	COBJS = $(COBJS)
	@echo	OBJS = $(OBJS)
	@echo	VPATH = $(VPATH)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值