我正在 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
一样保存编译器命令我想要这些命令执行的输出。
编译器警告发生在
stderr
,而不是 stdout
,这就是为什么当您将 make
重定向到其他地方时看不到它们的原因。相反,如果你使用 Bash,试试这个:
$ make &> results.txt
&
的意思是“将 stdout 和 stderr 重定向到这个位置”。其他 shell 通常具有类似的结构。
在 bourne shell 中:
制作 > my.log 2>&1
即> 重定向 stdout,2>&1 将 stderr 重定向到与 stdout 相同的位置
到目前为止有很多好的答案。这是一个褶边:
$ make 2>&1 | tee filetokeepitin.txt
会让你看到输出滚动过去。
输出到标准错误。使用
2>
捕捉它。
$make 2> file
假设您想从构建输出中突出显示警告和错误:
make |& grep -E "warning|error"
基于@dmckee 之前的回复
make | tee makelog.txt
这让你在编译时实时滚动输出,并同时写入 makelog.txt 文件。
尝试
make 2> file
。编译器警告出现在标准错误流上,而不是标准输出流上。如果我的建议不起作用,请查看您的 shell 手册以了解如何转移标准错误。
来自http://www.oreillynet.com/linux/cmd/cmd.csp?path=g/gcc
> 字符不会重定向 标准错误。这很有用,当你 想要保存合法输出而不 用错误消息弄乱文件。 但是如果错误信息是 你想保存什么?这是相当 在故障排除期间很常见。这 解决方案是使用大于号 后跟一个&符号。 (这 几乎每一个现代建筑工程 UNIX shell。)它同时重定向 标准输出和标准 错误。例如:
$ gcc invinitjig.c >& error-msg
看看那里,如果这有帮助: 另一个论坛
在C壳中 - 符号在大于号之后
make >& filename
这通常不是您想要做的。您希望在支持读取编译器输出并转到有问题的文件/行字符的编辑器中运行编译。它适用于所有值得考虑的编辑器。这是 emacs 设置:
https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation.html
以下命令将“make”命令的输出记录到文件“gnu_make.log”中
script gnu_make.log -c "make"
此文件可能包含 dos 格式的行终止字符,以消除可能使用以下命令。
dos2unix gnu_make.log
该文件还可能包含颜色转义序列,使用“cat”命令查看时效果很好,但如果想删除这些,可以使用以下命令完成
sed -i $'s/\e\\[[0-9;:]*[a-zA-Z]//g' gnu_make.log