我遇到从自动构建记录到输出的问题。
使用Makefile和makefile实用程序完成构建。
问题是编译器命令行之类的正常输出转到stdout并且编译错误转到stderr。
我想从屏幕上显示的构建中获取输出。如下所示:
(stdout) CC -c file.cpp
(stderr) Compile error at file.cpp line 232, blah blah blah
(stdout) CC -c file2.cpp
我尝试过(来自ksh脚本):
make -k> build.log 2> build.log
这导致单个日志文件,但问题是流被缓冲,因此日志文件中的结果全部混淆。
我可以将输出捕获到2个单独的日志文件中,但之后我就没有关于如何将它们粘合到一个日志文件中的信息。
在这种情况下,有没有办法关闭stdout和stderr的缓冲?
答案 0 :(得分:24)
make -k > build.log 2>&1
这应该对你更好,因为它不是单独重定向stderr和stdout,而是将stderr重定向到stdout,这应该使缓冲同步。
如果要将其记录到文件中并将其打印到控制台:
make -k 2>&1 | tee build.log
答案 1 :(得分:5)
试试这个
make -k > build.log 2>&1
答案 2 :(得分:0)
我可以将输出捕获到2 单独的日志文件但我会 没有关于如何粘合它们的信息 一起放入一个日志文件。
将它们粘合在一起很棘手,但也有正确的答案,而且它有效!请参阅Vivek Gite的“How do I save or redirect stdout and stderr into different files?”。
答案 3 :(得分:-2)
函数setbuf(标准输出,NULL); - >关闭stdout缓冲