继续上篇未完的内容。
%.hex: %.ihx
$(PACKIHX) $< > $@
这里我们寻找依赖文件hello-world.ihx的建立规则,
%.ihx: $(OBJECTDIR)/%.app.rel $(CONTIKI_TARGET_MAIN) contiki-$(TARGET).lib
$(CC) $(LDFLAGS) -o $@ $(CONTIKI_TARGET_MAIN) $(OBJECTDIR)/$*.app.rel -llibsdcc.lib -lcontiki-$(TARGET).lib > /dev/null
继续寻找obj_cc2530/hello-world.app.rel 的建立规则
$(OBJECTDIR)/%.app.rel: %.c $(SEGMENT_RULES)
$(CC) $(call c_seg,$<,$@) -DAUTOSTART_ENABLE $(CFLAGS) -c $< -o $@
依赖文件hello-world.c文件已经存在,所以寻找SEGMENT_RULES变量所代替的文件的重建规则。
SEGMENT_RULE_FILES = $(foreach dir, . $(CONTIKI_PLATFORM_DIRS) \
$(CONTIKI_CPU_DIRS_LIST), $(wildcard $(dir)/segment.rules) )
$(SEGMENT_RULES): $(SEGMENT_RULE_FILES)
cat $(SEGMENT_RULE_FILES) | \
sed -e 's/#.*$$//' -e 's/^\s*//' -e '/^$$/d' > $@
经过分析我们知道SEGMENT_RULE_FILES表示的在某些目录中的segment.rules文件列表
好!我们找到了这个文件,分别是cpu/cc253x/segment.rules platform/cc2530dk/segment.rules
既然找到了,而且肯定比目标新,那么就执行命令。这里用到了管道,将这些segment.ruls的内容最为sed的输入调用sed命令,让后将其重定向到目标文件obj_cc2530dk/segment.rules中,这个文件不存在,那么就创建它。
这个sed命令有点烦,因为它用到了正则表达式,-e选项表示后面跟的是正则表达式。s为替换命令,我大致说一下意思,就是将segment.rules文件中不符合它要求的字符行全部替换为空,或者删除。这些不符合要求的行为