最近从0搭建soc验证环境,碰到不少问题,比如Makefile,洋洋洒洒的写了一大通,集成了一些自己写的小脚本,尤其是用了比较复杂的Makefile写法以后,调试真是费了老鼻子劲了,不过这样一通摸索下来,总结了一个很简单的技巧,用了以后,调试makefile是事半功倍。
比如我搞的如下高级用法,从项目根目录下搜索所有的Make target并执行make,一开始,出错就是一脸懵,因为大型项目目录结构复杂,Makefile放在各级目录,每个Makefile下面都有定义一些target和cmd,错了都不知道make执行到哪里了。
$(SUBDIRS):
@if [[ -e $@ && ! -L $(abspath $@) ]]; then\
echo "[$(realpath $@)] $(MAKE) $(MAKECMDGOALS)" | sed 's%$(PROJ)/%$$PROJ/%g';\
\cd $@ && $(MAKE) $(MAKECMDGOALS);\
fi
开了”-n“以后,Make会只显示执行的cmd,但是并不会执行cmd。那么Make调试可以先用-n看一遍Make的执行顺序是否符合你的预期,然后再去掉-n调试具体cmd的报错。事半功倍。