首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对GNU Make文件进行性能分析

如何对GNU Make文件进行性能分析
EN

Stack Overflow用户
提问于 2011-08-24 20:36:13
回答 4查看 2.1K关注 0票数 6

我们有很多GNU Make文件。我想对构建过程中使用的每个目标进行计时,以确定任何性能瓶颈。有没有工具或技术可以方便地、自动地完成这项工作?

我可能想分析这些结果,以便随着构建的变化和增长而保持对性能因素的关注(但它已经相当大和复杂了)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-25 01:33:23

我想我以前在这里见过这个问题...

您可以将shell替换为调用shell但对其执行进行计时的东西,并将结果与目标名称一起写在某个地方。每个目标将只构建一次(否则make将拒绝运行),因此您所要做的就是将这些时间相加。

非常粗糙的例子:替换

代码语言:javascript
复制
make

使用

代码语言:javascript
复制
make SHELL='echo $@: && time sh'

如果您不想将时间加在一起,还必须以某种方式将每个目标的命令连接到一个命令中。要做到这一点,一种方法是预处理Makefile,但由于各种原因,除了最简单的Makefile之外,这对于任何一个都不能很好地工作。

例如,尝试像这样的东西

代码语言:javascript
复制
perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo $@: && time sh'

在这个方向上是一次非常粗糙的尝试。

有各种各样的替代方法,但我认为唯一真正的解决方案是添加这个功能;GNU make是用非常可移植的C编写的,所以这应该不是很难做到的。

票数 5
EN

Stack Overflow用户

发布于 2011-08-25 21:44:03

跳出框框思考:你是不是偶然使用递归make浪费了宝贵的电子资源,也就是说,将规则cd存入子目录并再次调用make?那就是你的问题了。一个非递归make可以快两个数量级。

有关详细信息,请参阅Recursive make considered harmful

票数 1
EN

Stack Overflow用户

发布于 2017-05-22 00:16:02

如果您正在尝试分析一个静态Makefile,可以查看make-profiler:

https://github.com/gojuno/make-profiler

它就像是对Makefile进行预处理、收集日志并绘制带有计时信息的调用图的make包装器。如果您正在创建一个长时间运行的数据处理管道,那么它尤其有用。

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

https://stackoverflow.com/questions/7175503

复制
相关文章

相似问题

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