下面基于u-boot 1.1.6版本
在u-boot 顶层目录下的Makefile中240行起:
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) all: $(ALL) $(obj)u-boot.hex: $(obj)u-boot $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ $(obj)u-boot.srec: $(obj)u-boot $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ $(obj)u-boot.bin: $(obj)u-boot $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ $(obj)u-boot.img: $(obj)u-boot.bin ./tools/mkimage -A $(ARCH) -T firmware -C none -a $(TEXT_BASE) -e 0 -n $(shell sed -n -e ‘s/.*U_BOOT_VERSION//p‘ $(VERSION_FILE) | sed -e ‘s/"[ ]*$$/ for $(BOARD) board"/‘) -d $< $@ $(obj)u-boot.dis: $(obj)u-boot $(OBJDUMP) -d $< > $@ $(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT) UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e ‘s/.*\(__u_boot_cmd_.*\)/-u\1/p‘|sort|uniq`; cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) -Map u-boot.map -o u-boot
上面代码中 $(obj)为目的路径, 在103行有定义, 下面这些变量的定义在顶层的config.mk中有定义,$(OBJCOPY) ${OBJCFLAGS} $(ARCH) $(TEXT_BASE) $(VERSION_FILE) $(BOARD) $(OBJDUMP) $(LIBS) $(LNDIR) $(LD) $(LDFLAGS) $(__OBJS) $(__LIBS) $(PLATFORM_LIBS) $(LDSCRIPT) $(SUBDIRS)
说明函数subst的用法,在config.mk中有这么一条语句:
dir := $(subst $(SRCTREE)/,,$(CURDIR))
变量 函数 参数1 参数2 参数3
意思为把$(CURDIR)字符串中包含的 $(SRCTREE)/ 字符串替换为空,后将其值赋给变量dir.
原文:https://www.cnblogs.com/liuxinyong236/p/9920748.html