如何将所有编译器的输出捕获到文件中?

时间:2010-02-19 15:47:16

标签: linux shell g++ makefile io-redirection

我正在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我想要这些命令执行的输出。

9 个答案:

答案 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