当我Makefile
时,是否有办法以递归方式回显make all
每个目标所花费的时间(系统,用户,实际)?
我想以比time make all
更精细的方式对项目的编译进行基准测试。理想情况下,它会回显执行目标的树,每个树都有在其所有依赖项中花费的时间。如果它可以与-j
(并行制作)一起使用也会很棒。顺便说一句,我的Makefile
是非递归的(不会为每个主要目标产生另一个make
实例)。
谢谢!
答案 0 :(得分:17)
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脚本。
答案 1 :(得分:2)
remake --profile是make
的替代产品。它以callgrind格式生成目标调用树。