【问题标题】:Duplicating stderr compilation output into separate file将 stderr 编译输出复制到单独的文件中
【发布时间】:2013-02-22 10:03:59
【问题描述】:

我有一个项目,它使用 ma​​ke 构建,我想添加可能性 分析警告消息的整体状态。

我的想法是更改 ma​​ke 规则,以便在完全重建期间将 stderr 编译输出复制到单独的文件中。意味着每次 ma​​ke all 完成时,所有输出都将打印在控制台中,此外 stderr 输出将复制到单独的文件中。

此警告报告文件将添加到存储库中,以便我可以比较存储库中存在的警告和本地警告。

问题是如何将标准错误输出复制(而不是重定向)到单独的文件中?表示我应该如何更改 Makefile 中的 all 目标?

我知道如何重定向 stderr 输出(ma​​ke all 2>warning_report.txt),但它不是 我需要的。警告消息应该在主控制台输出和警告文件中。

我使用 Windows 7 作为工作环境,但我之前没有处理过 Windows 命令行或批处理文件。

提前致谢。

已编辑:

在我的情况下,最终解决方案如下所示:

make all 3>&1 1>&2- 2>&3- | tee.bat warning_report.txt

在本例中,脚本 tee.bat 是用 JScriptWindows 编写的,我取自 PA 指定的 link(谢谢)。

交换呢,我从herehere拿来的。

【问题讨论】:

  • 在 SO stackoverflow.com/questions/10711839/… 上查看上一个问题
  • 为什么不直接将其重定向到一个文件,然后显示文件内容?
  • 因为整个项目的编译时间大约是5分钟。
  • 只是好奇,编译时间和我的评论有什么关系?

标签: windows batch-file makefile cmd


【解决方案1】:

我不了解 Windows,但您可以在 Linux 中使用 tee 命令来实现。 tee 用于将 STDOUT 重定向到文件和控制台,以便您可以利用它并检查是否可以解决您的问题。

make all 2>&1 1>stdout.log | tee stderr.log

STDERR 重定向到STDOUT,将STDOUT 重定向到stdout.log,并且所有STDERR 都被复制到stderr.log 并在控制台上回显。

但解决方案还不完整。 STDOUT 不会打印在控制台上,而只会复制到stdout.log。尝试使用您将得到解决方案的命令。

【讨论】:

    【解决方案2】:

    我刚刚重新阅读了您的问题,并决定尝试回答。

    这是一个用于导出 stderr 并显示它的 sn-p。

    @echo off
    if exist stderr.error del stderr.error
    this_is_not_a_command 2>stderr.error
    if exist stderr.error type stderr.error & del stderr.error
    

    这会将stderr 导出到一个文件,然后显示该文件的内容。

    希望对您有所帮助。

    【讨论】:

    • 感谢您的帮助。因为现在我无法访问我的电脑,所以我现在不能尝试这个。我会在星期一试试。
    • 进展如何?有帮助吗?
    • 我曾尝试使用它,但最终我使用了上面解释的解决方案(参见 edited above 部分)。
    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多