Makefile 控制make命令的输出,使其不那么冗长,don';t回显每个命令

Makefile 控制make命令的输出,使其不那么冗长,don';t回显每个命令,makefile,silent,verbosity,Makefile,Silent,Verbosity,目前,我正在使用Makefile来跟踪项目的所有依赖项和副本。问题是make只是简单地输出它所做的一切,这使得它很难发现(甚至读取)更重要的信息(例如编译器警告) 是否有方法控制终端上显示的信息?我知道有一个-s选项可以使make静音,但这不是我想要的。我需要一些更精细的东西,可能显示编译目标而不显示整个编译命令 有什么办法可以控制吗 注意:关于automake和autoconf命令有一个错误。但我不使用这些,我专门在寻找一些现成的东西。嗯,这是通常的做法 target: dependency1

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

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

有什么办法可以控制吗


注意:关于automake和autoconf命令有一个错误。但我不使用这些,我专门在寻找一些现成的东西。

嗯,这是通常的做法

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

通过将各种操作的输出重定向到
/dev/null
,可以抑制这些操作的输出。如果你想让一行真正安静,请记住也要对标准错误进行分级。

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

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

您还可以将过滤放在
Makefile
本身中,例如通过调整
SHELL
变量 或者添加调用
$(MAKE)| grep
的目标

其主要思想是允许根据呼叫方的意愿打开和关闭过滤功能。

(为时已晚,添加过滤功能只是为了谷歌用户登陆此处) 这对我有用。在Makefile上,您可以使用以下方法控制每个命令的详细程度:

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

虽然使用
@
很容易做到这一点,但如果你想让更多的人了解你的项目,请重新考虑使用它。“我讨厌阅读编译器调用,但需要某种进度指示器,所以我使用@echo”这一点是可以理解的。但是,如果你希望除你之外的任何人都能编译你的项目,请留下完整的编译器行,否则你会在bug报告中要求这些行,他们会攻击你的Makefile以找回它们。@thiton说得对。当我即将发布时,我会记住这一点。相关:相反的问题可能是
BRIEF = CC HOSTCC HOSTLD AS YASM AR LD
SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM STRIP