【问题标题】:Control the output of a make command to be less verbose, don't echo each command控制 make 命令的输出不那么冗长,不要回显每个命令
【发布时间】:2012-01-16 08:12:59
【问题描述】:

目前,我正在使用 Makefile 来跟踪我的项目的所有依赖项和编译。问题是 make 只是简单地输出它所做的一切,这使得很难发现(甚至读取)更重要的信息(例如编译器警告)。

有没有办法控制终端上显示什么信息?我知道有一个-s 选项可以使make 静音,但这不是我想要的。我需要一些更精致的东西,也许显示编译目标而不显示整个编译命令。

有什么办法可以控制吗?

注意:关于 automake 和 autoconf 命令有一个similar question。但我不使用这些,而且我正在专门寻找制作中的东西。

【问题讨论】:

  • 虽然使用@ 很容易做到这一点,但如果您的项目要吸引更广泛的受众,请重新考虑使用它。 “我讨厌阅读编译器调用,但想要某种进度指示器,所以我使用 @echo”这一点是可以理解的。但是,如果您希望除您之外的任何人编译您的项目,请保留完整的编译器行,否则您将在错误报告中询问这些行,他们将破解您的 Makefile 以取回它们。
  • @thiton 好点。当我即将发布时,我会记住这一点。

标签: makefile silent verbosity


【解决方案1】:

这就是平常的事情

target: dependency1 dependency2
    @echo Making $@
    @$(CC) -o $@ $(OPTIONS) $^

leading @'s suppress the usual behavior of echoing the action without suppressing its output

可以通过将其重定向到/dev/null 来抑制各种操作的输出。如果你想让一行真的很安静,记得也要给标准错误评分。

【讨论】:

    【解决方案2】:

    标准的 Unix 答案(`make` 是一个 Unix 工具,毕竟):

    make (...) | grep (whatever you want to see)
    

    为什么这不是一个合适的解决方案?

    您也可以在 Makefile 本身内进行过滤,例如通过调整 SHELL 变量 或者添加一个调用$(MAKE) | grep的目标。

    主要思想是允许根据调用者的意愿打开和关闭过滤。

    【讨论】:

      【解决方案3】:

      (为时已晚,仅为登陆此处的 Google 员工添加) 这对我有用。在您的 Makefile 上,您可以使用以下内容控制每个命令的详细程度:

      BRIEF = CC HOSTCC HOSTLD AS YASM AR LD
      SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM STRIP
      

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2015-10-31
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多