Bash 将时间的输出和它正在计时的命令写为一行
我试图计算代码库中每个文件编译所需的时间 根据,您可以编写一个脚本,对实际编译进行计时,然后将结果存储在文件中Bash 将时间的输出和它正在计时的命令写为一行,bash,cmake,Bash,Cmake,我试图计算代码库中每个文件编译所需的时间 根据,您可以编写一个脚本,对实际编译进行计时,然后将结果存储在文件中 /tmp/时间构建: #!/bin/bash { time g++ "$@"; } 2> >(cat <(echo "g++ $@") - >> /tmp/results.txt) 这与广告宣传的一样有效,并产生与以下类似的结果: real 0m1.190s user 0m1.044s sys 0m0.140s g++ -Werror
/tmp/时间构建
:
#!/bin/bash
{ time g++ "$@"; } 2> >(cat <(echo "g++ $@") - >> /tmp/results.txt)
这与广告宣传的一样有效,并产生与以下类似的结果:
real 0m1.190s
user 0m1.044s
sys 0m0.140s
g++ -Werror -Wall -Wextra ... /src/test/foo.cpp
但是,为了简化处理,我只想存储real
时间,并将其与g++命令放在同一行上
问题:
#!/bin/bash
{ time g++ "$@"; } 2> >(cat <(echo "g++ $@") - >> /tmp/results.txt)
我的命令行fu无法完成以下任务:
{ time g++ "$@"; } 2> >(cat <(echo "g++ $@") - >> /tmp/results.txt)
{time g++“$@”}2>>(cat>/tmp/results.txt)
输入一个命令,该命令只捕获时间的real
输出,并将其与echo“g++$@”
一起包含在一行中
我不知道
>(cat对于基于CMake的项目,获取编译时间的最佳方法可能是使用而不是make
为此,您必须在配置时指定ninja generator:
cmake -G Ninja <...>
然后,查看名为.ninja_log
的文件。第一列是以毫秒为单位的开始时间,第二列是结束时间,第四列是目标名称,最后一列是所用命令行的散列
甚至还有一些查看和分析此日志的解决方案:将.ninja_log
转换为Chrome的跟踪工具可读的格式。添加一点sed
技巧内联?@πάνταῥεῖ 你能推荐一些吗?嗯,我的沙发现在有点生锈了;-)。你发现问题了吗?如果你已经使用了CMake,我建议你使用ninja而不是make(使用-G ninja
),后者将编译时间输出到.ninja_log
文件。@πάνταῥεῖ 是的,这就是我在这篇文章中提到的问题,我对答案的评论来自我自己!还没有答案,所以这个问题谢谢,我会查出来的!
cmd=(clang "$@")
{ time "${cmd[@]}"; } 2> >( tee >( real=$(grep -Po 'real\K.*'); echo "${cmd[*]} $real" >>result.txt ) )
cmd=(clang "$@")
{ time "${cmd[@]}"; } 2> >( tee >( real=$(grep -Po 'real\K.*'); echo "${cmd[*]} $real" >>result.txt ) )