mqt*_*iqs 17 benchmarking profiling makefile gnu-make
Makefile当我这样做时,有没有办法回应递归的每个目标所花费的(系统,用户,真实)时间make all?
我想以更细粒度的方式对项目的编译进行基准测试time make all.理想情况下,它会回显执行目标的树,每个树都有在其所有依赖项中花费的时间.如果它可以使用-j(并行制作)也会很棒.顺便说一下,我Makefile是非递归的(不会make为每个主要目标产生另一个实例).
谢谢!
hol*_*eek 17
Gnu Make使用$(SHELL)变量在目标中执行命令.
默认情况下,它设置为/ bin/sh.
您可以将此变量设置为将执行使用"time"命令指定的命令的脚本.像这样的东西:
在你的makefile中,在顶部的某处指定SHELL变量:
SHELL = ./report_time.sh
Run Code Online (Sandbox Code Playgroud)
并在文件./report_time.sh中:
#!/bin/sh
shift # get rid of the '-c' supplied by make.
time sh -c "$*"
Run Code Online (Sandbox Code Playgroud)
将'sh'命令替换为Makefile中指定的原始SHELL(如果有).
这将报告时间.
但是,这不会告诉您report_time.sh脚本正在运行的目标.对此的一个解决方案是在makefile中的每个目标条目中添加目标名称($ @),以便它也将传递给report_time.sh脚本.