首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >测量(概要) Makefile的每个目标所花费的时间

测量(概要) Makefile的每个目标所花费的时间
EN

Stack Overflow用户
提问于 2011-08-06 20:48:09
回答 2查看 8.1K关注 0票数 20

当我执行make all时,有没有办法递归地回显在Makefile的每个目标上花费的(系统、用户、实际)时间

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

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-08-06 21:14:01

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

默认情况下,它被设置为/bin/sh。

您可以将此变量设置为一个脚本,该脚本将执行与"time“命令一起给定的命令。如下所示:

在makefile中,在顶部的某个位置指定SHELL变量:

代码语言:javascript
复制
SHELL = ./report_time.sh

和文件./report_time.sh中:

代码语言:javascript
复制
#!/bin/sh
shift  # get rid of the '-c' supplied by make.
time sh -c "$*"

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

这将报告计时。

但是,这不会告诉您report_time.sh脚本正在运行的目标是什么。一种解决方案是在makefile中的每个目标条目中预先加上目标名称($@),这样它也会被传递给report_time.sh脚本。

票数 20
EN

Stack Overflow用户

发布于 2019-01-24 07:54:51

remake --profilemake的临时替代品。它生成一个callgrind格式的目标调用树。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6966877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档