Makefile解析(ARM LINLON V5/V7 VPU firmware tools例)

根目录Makefile

初始化一些变量
TARGETS := model executiontb cpu
ROOT_DIR?=$(abspath $(CURDIR))
OUT_DIR?=$(abspath $(CURDIR))
ADDR_FILE:=$(ROOT_DIR)/build/mmu_addr.txt

make all 执行 make help
all: help

.PHONY后面跟的目标都被称为伪目标,也就是说我们 make 命令后面跟的参数如果出现在.PHONY 定义的伪目标中,那就直接在Makefile中就执行伪目标的依赖和命令。不管Makefile同级目录下是否有该伪目标同名的文件,即使有也不会产生冲突。另一个就是提高执行makefile时的效率
.PHONY: session_dump_file
session_dump_file:
ifndef SESSION_DUMP
        $(error No SESSION_DUMP file provided)
endif
echo和@echo的区别
  make 在执行命令之前会把要执行的命令进行输出,称之为回显
  如果要执行的命令以字符 @ 开始,则不会回显,例如:
1. @echo XXX
  在执行命令时,将输出  
   XXX
2. echo XXX
  在执行命令时,将输出    
   echo XXX    
   XXX
        @echo "Binarizing $(SESSION_DUMP) -> ${OUT_DIR}/src/session_dump.c"
        build/bin2a.sh -l $(SESSION_DUMP) g_session_dump > ${OUT_DIR}/src/session_dump.c

.PHONY: self_check
self_check:
ifdef SELF_CHECK
        @echo "SELF_CHECK enabled: Binarizing $(SELF_CHECK) -> ${OUT_DIR}/src/self_check_reference.c"
        build/bin2a.sh -i $(SELF_CHECK) g_self_check_reference > ${OUT_DIR}/src/self_check_reference.c
endif

define
endef
定义一个函数
可以通过$(call xxx)来进行调用
define target_rule
$(1): session_dump_file self_check
ifeq ($(PRE_CONVERT_PTABLE), 1)
        $$(MAKE) -f build/compile-$(1).mk ROOT_DIR=$(ROOT_DIR) OUT_DIR=$(OUT_DIR) ADDR_FILE=$(ADDR_FILE) 
        python $(ROOT_DIR)/build/mmu_restore.py -i $(SESSION_DUMP) -s $(ADDR_FILE) -b 0
        /bin/rm -rf obj bin
        /bin/rm $(ADDR_FILE)
        /bin/mv $(SESSION_DUMP).tmp $(SESSION_DUMP)
        build/bin2a.sh -l $(SESSION_DUMP) g_session_dump > ${OUT_DIR}/src/session_dump.c
endif
顶层Makefile使用make -f调用子目录中的文件(文件名可以随意,不一定用Makefile作为文件名)作为Makefile,经测试,在顶层Makefile中使用-f选项,例如make -f ./xxx/xx/build.mk 此时make命令的工作目录仍然是顶层目录,即CUDIR变量依然是./目录而不是./xxx/xx/目录
        $$(MAKE) -f build/compile-$(1).mk ROOT_DIR=$(ROOT_DIR) OUT_DIR=$(OUT_DIR)

.PHONY: $(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码论斤卖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值