Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将时间的输出和它正在计时的命令写为一行_Bash_Cmake - Fatal编程技术网

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 ) )