关于makefile的几个常用函数及静态模式

做项目去了,然后发现一个星期前学的东西快忘光了,翻翻以前的代码回忆一下。

这是makefile不涉及指令的字符串预处理部分,首先明确目标,需要的字符串有以下:

arm-linux-guneabihf-gcc        交叉编译器编译指令

arm-linux-guneabihf-ld           交叉编译器链接指令

arm-linux-guneabihf-objcopy  交叉编译器elf转bin指令

arm-linux-guneabihf-objdump 交叉编译器elf转dis指令(反编译)

所有的.o文件名

汇编.s文件编译的.o文件名

c语言.c文件编译的.o文件名

所有的源文件文件路径

所有的”-I 头文件文件路径“

然后看几个字符串处理函数的用法

$(patsubst %, -I %, $(INCDIRS))代表找出$(INCDIRS)中的单词并在前面加-I

$(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))代表找到源文件路径中的所有.s文件并以空格隔开组成新的字串

$(notdir $(SFILES))代表去掉文件路径,只留下文件名

VPATH := $(SRCDIRS)
.PHONY: clean

VPATH和.PHONY是makefile的两个关键字,一个指定脚本搜索文件的路径,一个指定伪指令名字

然后就是有关规则的部分

默认目标文件部分和clean伪指令没有使用特殊模式不必多说

编译部分使用了makefile的静态模式需要留意,关于静态模式

$(SOBJS) : obj/%.o : %.S

前面把$(SOBJS)处理成由.S文件编译生成的.o文件文件名(包含路径如obj/start.o)

而目标模式则是搜寻所有符合obj/%.o的单词,显然字串的所有单词都符合

依赖模式则为需要生成的.o文件依赖的所有.S文件(不包含路径)因为前面设置了VPATH,所以makefile会自动帮我们搜寻,而之所以要在.o文件前加路径,是因为我们想指定生成.o文件后的存放路径

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值