以前从未在意过makefile的执行效率,直到最近,由于需要将代码前前后后编译几十遍甚至上百遍,才发现原来的方式实在太慢。
以前的方式:
ALL ?=
default: END
target1:
cd . && make clean ready ....
ALL += target1
target2:
cd . && make clean ready .....
ALL += target2
很多的target
done:
@echo done
END: $(ALL) done
这样前前后后编译下来,天哪,竟然要2个小时,想想这样的操作需要3遍,基本上一天就没有了。这实在忍受不了。
make命令支持-j参数,可以并行执行,但上述模式是不可以的。由于调用make命令会将-j参数设置为默认的,因此在最外部调用-j参数无实质性作用
测试一下大致的目标,将所有生成的中间文件的命令完全的写入到一个临时文件中,并在原来的目标中生成临时文件,以便检查依赖性通过,然后在最后一步运行中间文件的命令时使用并行执行。这样时间大幅度的降低为40分钟左右。