Logging 如何在不缓冲stdout和stderr的情况下记录make输出

Logging 如何在不缓冲stdout和stderr的情况下记录make输出,logging,makefile,stderr,buffering,Logging,Makefile,Stderr,Buffering,我在记录到自动生成的输出时遇到问题 构建是使用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.l

我在记录到自动生成的输出时遇到问题

构建是使用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

这将导致一个日志文件,但问题是流被缓冲,因此日志文件中的结果都是混合的

我可以将输出捕获到两个单独的日志文件中,但是我没有关于如何将它们粘合回单个日志文件的信息

在这种情况下,有没有办法关闭stdout和stderr的缓冲?

试试这个

make -k > build.log 2>&1
这对您来说应该更好,因为它不是分别重定向stderr和stdout,而是将stderr重定向到stdout,这将使缓冲同步

如果要将其记录到文件并打印到控制台:

make -k 2>&1 | tee build.log
我可以将输出捕获为2 单独的日志文件,但我会 没有关于如何将它们粘回的信息 合并到单个日志文件中


把它们粘在一起是很棘手的,但也有一个正确的答案,而且很有效!请参阅Vivek Gite的“”。

setbuf(标准值,空值);->关闭标准输出缓冲

嗨,Ryan,它工作起来很有魅力,但我有一个问题,如何在制造时间记录和查看消息?您的命令只记录消息。感谢you@LoiDang已更新,添加了一个可同时处理文件和控制台的替代方案。
make -k 2>&1 | tee build.log