makefile - 测量(配置文件)在Makefile的每个目标中花费的时间

标签 makefile profiling gnu-make benchmarking

当我执行Makefile时,是否可以递归地回荡在make all的每个目标中花费的(系统,用户,实际)时间?

我想以比time make all更细粒度的方式对项目的编译进行基准测试。理想情况下,它将回显已执行目标的一棵树,每个目标都有其所有依赖项所花费的时间。如果它可以与-j(并行make)一起使用,那就太好了。顺便说一下,我的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 "$*"


如果有,请用Makefile中指定的原始SHELL替换“ sh”命令。

这将报告时间。

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

关于makefile - 测量(配置文件)在Makefile的每个目标中花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966877/

相关文章:

Eclipse CDT : Skip make/build before Debug/Run

xcode - 如何使用 Instruments 分析内存使用情况和性能?

Makefile 模式规则要么忽略虚假规则,要么自发删除输出文件

makefile - GNU make 总是将非文件目标视为正在重制(可能是错误?)

c - 在Linux上编译OpenCL ICD加载器时出错

makefile - 在 Makefile 中, "VARIABLE = value"是否等于“VARIABLE=value?

profiling - Coq定理的高速计算

c - 如何让 gnu make 将中间文件视为过期文件

我可以在 C 程序中拦截正常的 stdio 调用,做一些工作然后调用原始的吗?

optimization - 参数传递样式的 Haskell 堆问题