我正在Linux中从源代码(CPP)构建一个开源项目。这是订单:
$CFLAGS="-g Wall" CXXFLAGS="-g Wall" ../trunk/configure --prefix=/somepath/ --host=i386-pc --target=i386-pc
$make
编译时我收到很多编译器警告。我想开始修复它们。我的问题是如何捕获文件中的所有编译器输出?
$make > file
没有做好这项工作。它只是保存编译器命令,如g++ -someoptions /asdf/xyz.cpp
我想要这些命令执行的输出。
答案 0 :(得分:103)
编译器警告发生在stderr
上,而不是stdout
,这就是为什么当您只是将make
重定向到其他地方时没有看到它们的原因。相反,如果你正在使用Bash,请试试这个:
$ make &> results.txt
&
表示“将stdout和stderr重定向到此位置”。其他壳通常具有类似的结构。
答案 1 :(得分:23)
在bourne shell中:
制作> my.log 2>& 1
即。 >重定向stdout,2>& 1将stderr重定向到与stdout相同的位置
答案 2 :(得分:22)
到目前为止,很多好的答案。这是一个褶边:
$ make 2>&1 | tee filetokeepitin.txt
可让您观看输出滚动过去。
答案 3 :(得分:5)
输出转到stderr。使用2>
来捕获它。
$make 2> file
答案 4 :(得分:3)
来自http://www.oreillynet.com/linux/cmd/cmd.csp?path=g/gcc
>字符不会重定向 标准错误。这对你很有用 想要保存合法的输出而不用 使用错误消息删除文件。 但是如果错误消息是什么呢 你要保存什么?这是相当的 在故障排除时常见该 解决方案是使用大于号 然后是&符号。 (这个 建筑几乎适用于所有现代建筑 UNIX shell。)它重定向两个 标准输出和标准 错误。例如:
$ gcc invinitjig.c >& error-msg
看看那里,如果这有帮助: another forum
答案 5 :(得分:3)
假设你想要从构建输出中获得hilight警告和错误:
make |& grep -E "warning|error"
答案 6 :(得分:2)
基于@dmckee的早期回复
make | tee makelog.txt
这使您可以在编译时实时滚动输出,并同时写入makelog.txt文件。
答案 7 :(得分:0)
试试make 2> file
。编译器警告出现在标准错误流上,而不是标准输出流。如果我的建议不起作用,请查看您的shell手册,了解如何转移标准错误。
答案 8 :(得分:0)
在 C shell 中 -与号位于大号后面
make >& filename