makefile

24 篇文章 0 订阅
  1 CROSS_COMPILE   ?= arm-linux-gnueabihf-
  2 TARGET                  ?= bsp
  3 
  4 CC                              := $(CROSS_COMPILE)gcc #$(变量名)引用变量
  5 LD                              := $(CROSS_COMPILE)ld
  6 OBJCOPY                 := $(CROSS_COMPILE)objcopy
  7 OBJDUMP                 := $(CROSS_COMPILE)objdump
  8 #整个工程的.h头文件目录,"\"表示换行符
  9 INCDIRS                 := imx6ul \
 10                                    bsp/clk \
 11                                    bsp/led \
 12                                    bsp/delay
 13         #整个工程的所有.c和.s文件                                                  
 14 SRCDIRS                 := project \
 15                                    bsp/clk \
 16                                    bsp/led \
 17                                    bsp/delay
 18 
 19         #       $(subst <from>,<to>,<text>)     将字符串<text>中的<from>内容替换为<to>
 20         #   $(patsubst <pattern>,<replacement>,<text>) 和上面一样但是多了"%".
 21         #   $(dir <names...>)   提取目录.如$(dir </src/a.c>) 还回/src.
 22         #   $(notdir <names...>)   提取文件名.如$(notdir </src/a.c>) 还回a.c
 23         #   $(foreach <var>, <list>,<text>) 把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所包含的表达式。
 24         #   每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字符串会以空格隔开,最后当整个循环结束时, 
 25         #   <text>所返回的每个字符串所组成的整个字符串将会是函数 foreach 函数的返回值。
 26 INCLUDE                 := $(patsubst %, -I %, $(INCDIRS))
 27 
 28 SFILES                  := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
 29 CFILES                  := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
 30 
 31 SFILENDIR               := $(notdir  $(SFILES))
 32 CFILENDIR               := $(notdir  $(CFILES))
 33 
 34 SOBJS                   := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))#放入obj文件夹
 35 COBJS                   := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
 36 OBJS                    := $(SOBJS) $(COBJS)
 37 
 38 VPATH                   := $(SRCDIRS)
 39 # "="变量的真实值取决于它所引用的变量的最后一次有效值.
 40 #":="不会使用后面定义变量的值.
 41 #"?="若前面没有赋值则现在赋值.若已经赋值则用之前的值.
 42 #"+="追加变量的内容.
 43 .PHONY: clean  #伪目标clean. 避免生成文件,规则后面的命令会执行.
 44         
 45 $(TARGET).bin : $(OBJS)
 46         $(LD) -Timx6ul.lds -o $(TARGET).elf $^
 47         $(OBJCOPY) -O binary -S $(TARGET).elf $@
 48         $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis
 49 #"%"目标中表示对文件名的匹配.或者表示模式规则.
 50 $(SOBJS) : obj/%.o : %.S #所有的.c和.s文件.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值