Ubuntu下使用BSP方式开发板子方式的Makefile编写和注释(全网最全)

Ubuntu下使用BSP方式开发板子方式的Makefile编写和注释(全网最全)

前言

本篇文章内容直接明了,就是对于用BSP的方式编写程序后进行对应的Makefile文件的编写和相应的注释。

说明

在学习Linux板子时我发现了一个问题,每个工程的Makefile文件都没有任何与之相对应的注释,这样对于新手来说无疑是非常闹过的一件事情,邵了还好,一旦代码内容一往上增加,我们就会越看越懵,以至于后面直接看不下去,所以对于BSP的方式,我从头到尾的对于Makefile文件里面的代码进行逐字逐句的注释,以帮助需要的朋友快速的看懂并且理解.

代码编写及注释

在bash里面(就是在对Makefile里面进行编程)进行编写的时候,可能有些用户对于怎样注释的问题存在问题,这里我也给大家写上了。

单行注释是#打头,而多行注释就是<< BLOCK xxxx BLOCK(xxxx就是需要注释的内容)

#对于CROSS_COMPILE和TARGET进行赋值,?=是意思就是判断CROSS_COMPILE和TARGET是否前面已经赋值如果前面赋值过了,两者则保持前面的值不变,否则就将arm-linux-gnueabihf-和bsp赋值给CROSS_COMPILE和TARGET

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

#这里和上面意思差不多,都是赋值的意思,而:=意思就是直接赋值,这里就是将编译烧写的命令进行了模块化的编写
CC 				:= $(CROSS_COMPILE)gcc
LD				:= $(CROSS_COMPILE)ld
OBJCOPY 		:= $(CROSS_COMPILE)objcopy
OBJDUMP 		:= $(CROSS_COMPILE)objdump

#定义头文件目录的文件,将其赋值给INCDIRS,:=后面的路径用户根据自己的实际路径进行编写
INCDIRS 		:= imx6ul \
				   bsp/clk \
				   bsp/led \
				   bsp/delay 

#定义.c文件目录的路径,将其赋值给SRCDIRS,:=后面和前面一样			   			   
SRCDIRS			:= project \
				   bsp/clk \
				   bsp/led \
				   bsp/delay 
				   
#在对前面的.h文件进行编译的时候需要在文件前面加上 -I,这里INCLUDE的作用就是存放:=后面命令加上 -I的.h文件,patsubst函数是模式字符串替换函数			   
INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))

#SFILES和CFILES用来保存我们工程吓到所有汇编文件(.S)和c文件(.c),:=后面语句的意思就是将SRCDIRS下所有适配的.S和.c文件放入dir中
SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

#获取SFILES和CFILES文件中的.S文件和.c文件的文件名(不带路径)
SFILENDIR		:= $(notdir  $(SFILES))
CFILENDIR		:= $(notdir  $(CFILES))

#将SFILENDIR和CFILENDIR的.S和.c文件全部变成.o文件(OBJS)并且移动到obj目录下
SOBJS			:= $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS			:= $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS			:= $(SOBJS) $(COBJS)

#指定文件路径,当编译时找不到文件路径,这儿就能发挥作用,让其在SRCDIRS指定的路径当中查找
VPATH			:= $(SRCDIRS)

#创建伪目标进行后面的清除功能
.PHONY: clean

#这里就是对工程的编译过程,也一样的格式,都不要变动,这里就不细讲了	
$(TARGET).bin : $(OBJS)
	#运行imx6ul.lds文件将.o文件生成.elf链接文件
	$(LD) -Timx6ul.lds -o $(TARGET).elf $^
	#将.elf文件进行格式转换成.bin文件
	$(OBJCOPY) -O binary -S $(TARGET).elf $@
	#将elf反汇编成.dis文件
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

#将所有的.s编译成	.o文件
$(SOBJS) : obj/%.o : %.S
	$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<
#将所有的.c编译成	.o文件
$(COBJS) : obj/%.o : %.c
	$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<

#清除函数,将对应的.elf .dis .bin文件删除	
clean:
	rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

总结

编写Makefile文件主要就是考察我们的汇编基础和逻辑能力,对于不咋熟悉的同学来说,可以多看看配套的参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子小白的每一天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值