获取Quiet Make以在出错时回显命令行

5 makefile suppress

我有一个Makefile构建许多带有长命令行的C文件,我们通过以下规则清理输出:

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)

现在这很好,因为@抑制了正在发出的编译行.但是当我们收到错误时,我们得到的只是错误消息,没有命令行.谁能想到一个"整洁"的方式发出命令行?我能想到的就是将它回显到一个文件,并有一个更高级别的make捕获错误并捕获文件.Hacky,我知道.

Raj*_*ish 7

测试并且它有效(在Linux中为GNU make):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这种方式不再发出命令失败的通知,并将继续,就像它成功一样.也许你可以添加一个"&& false"来补偿这一点. (2认同)

Set*_*ley 7

这个问题是很老,但对于那些你谷歌搜索的,我想我会在这种情况下,做的是别名makemake -s在我的壳(无声模式),只有把@前缀表示,其中线之前echo或正在调用的其他诊断命令.当我想要完整的输出时make,我会通过调用它来覆盖我的别名\make.

还要注意,在这种情况下,你需要做一些典型的事情,并把它@echo放在自己的行上,实际的规则命令在不同的行上,没有@.