如何性能分析GNU Make文件

Del*_*ted 6 makefile gnu-make

我们有很多GNU Make-files.我想计算构建期间使用的每个目标,以确定任何性能瓶颈.是否有工具或技术以方便和自动的方式执行此操作?

我可能想解析这些结果,以便在构建发生变化和增长时密切关注性能因素(但它已经非常庞大和复杂).

rei*_*ost 5

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

您可以使用调用shell但将其执行时间的内容替换为shell,并将结果与​​目标名称一起写入某处.每个目标只会构建一次(或者make会拒绝运行)所以你所要做的就是将时间加在一起.

很粗糙的例子:替换

make
Run Code Online (Sandbox Code Playgroud)

make SHELL='echo $@: && time sh'
Run Code Online (Sandbox Code Playgroud)

如果您不想将时间添加到一起,则还必须以某种方式将每个目标的命令加入到单个命令中.一种方法是通过预处理Makefile,但由于各种原因,除了最简单的Makefile之外,它不会很好.

例如尝试类似的东西

perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo $@: && time sh'
Run Code Online (Sandbox Code Playgroud)

在这方面是一个非常粗暴的刺.

有各种替代方法,但我认为唯一真正的解决方案是添加此功能; GNU make是用非常便携的C编写的,所以不应该很难.