@sed "$(SEDFLAGS)" < $< > $@ 语法解析

出处: http://lxr.free-electrons.com/source/arch/arm/boot/compressed/Makefile?v=3.8
撷取了和命令行有关的参数变量:
KCONFIG_CONFIG    ?= .config
 77 ifeq ($(CONFIG_ZBOOT_ROM),y)
 78 ZTEXTADDR       := $(CONFIG_ZBOOT_ROM_TEXT)
 79 ZBSSADDR        := $(CONFIG_ZBOOT_ROM_BSS)
 80 else
 81 ZTEXTADDR       := 0
 82 ZBSSADDR        := ALIGN(8)
 83 endif
 85 SEDFLAGS        = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
194 $(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG)
195         @sed "$(SEDFLAGS)" < $< > $@

上面的文件撷取于Makefile 文件,涉及make语法和shell脚本语言,以下具体列出:

在Makefile中:
$< :表示第一个目标依赖,在此处即是文件 $(obj)/vmlinux.lds.in(对应于linux3.8内核的 arch/arm/boot/compressed/vmlinux.lds.in)文件
$@:表示目标集合,在此处即文件 $(obj)/vmlinux.lds ==》(对应于) arch/arm/boot/compressed/vmlinux.lds

shell语言:
@sed :: shell语法执行在Makefile 文件中加@可以显示执行步骤;
<:: 输入于,此处即输入文件 $(obj)/vmlinux.lds.in
 >:: 输出到,此处即输出到目标文件 $(obj)/vmlinux.lds中
"$(SEDFLAGS)":: 即s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
$(ZTEXTADDR):: 即 ZTEXTADDR       := 0 (此处假定 ifeq ($(CONFIG_ZBOOT_ROM),y) 不成立)
$(ZBSSADDR::即 ZBSSADDR        := ALIGN(8)
从而可得到
"$(SEDFLAGS)":: =s/TEXT_START/“0”/;s/BSS_START/"ALIGN(8)"/

整个语法可以表达为
 @sed s/TEXT_START/“0”/;s/BSS_START/"ALIGN(8)"/  <  $(obj)/vmlinux.lds.in >  $(obj)/vmlinux.lds
  也就是用sed的替代命令将 vmliux.lds.in文件中包含“TEXT_START”文本替换为“0”,将“BSS_START”替换为“ALIGN(8)”,将其替换后的文件输出到 vmlinux.lds文件中。
 
 另外在Makefile文件中,后面的两个目标依赖好像是条件限制(即 arch/arm/boot/Makefile $(KCONFIG_CONFIG) 起到条件限制作用)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值