ILD

Make删除临时文件的问题
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2022-5-28 站点:Inside Linux Development

在移植ipq5018的uboot的时候,发现dtb每次读重编。原因是.S和.dtb被删除了,编译日志打印:

rm arch/arm/dts/ipq5018-mp02.1.dtb.comb.S arch/arm/dts/ipq5018-mp02.1.dtb


还以为是Makefile的rule删除的,搜索了源码,没有发现执行rm的地方。原来是GNU Make搞的鬼。GNU Make会删除中间文件。例子如下:


run-%: d/%.out
    $<

d/%.out: d/%.c
    gcc -o $(subst .c,.out,$<) $<


执行: make run-a,中间文件d/%.out被删除了。


GNU make会删除implicit rule的中间文件。这里使用了%,就相当于使用了隐式规则,导致中间文件被删除。


解决办法是使用.PRECIOUS伪目标。

.PRECIOUS: $(obj)/%.dtb.comb.S $(obj)/%.dtb



参考:

https://unix.stackexchange.com/questions/517190/what-causes-make-to-delete-intermediate-files


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.