度量(概要)在Makefile的每个目标上花费的时间



当我执行make all时,是否有一种方法可以递归地回显(系统、用户、实际)在Makefile的每个目标上花费的时间?

我想以更细粒度的方式对项目的编译进行基准测试,而不仅仅是time make all。理想情况下,它将返回已执行目标的树,每个目标都包含在其所有依赖项上花费的时间。如果它能与-j(并行制造)一起工作,那就太好了。顺便说一下,我的Makefile是非递归的(不会为每个主要目标生成另一个make实例)。

谢谢!

Gnu Make使用$(SHELL)变量来执行目标中的命令。

默认设置为/bin/sh

您可以将该变量设置为脚本,该脚本将执行与"time"命令一起给出的命令。像这样:

在您的makefile中指定SHELL变量,在顶部的某个地方:

SHELL = ./report_time.sh

和./report_time.sh文件:

#!/bin/sh
shift  # get rid of the '-c' supplied by make.
time sh -c "$*"

将'sh'命令替换为Makefile中指定的原始SHELL(如果有的话)

这将报告时间。

然而,这不会告诉您report_time.sh脚本正在运行的目标。对此的一种解决方案是在makefile中的每个目标条目中加上目标名称($@),以便将其也传递给report_time.sh脚本。

redirect——profile是make的直接替代品。它以callgrind格式生成一个目标调用树。

相关内容

  • 没有找到相关文章

最新更新