我有一个Makefile构建许多带有长命令行的C文件,我们通过以下规则清理输出:
.c${MT}.doj:
@echo "Compiling $<";\
$(COMPILER) $(COPTS) -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
现在这很好,因为@抑制了正在发出的编译行.但是当我们收到错误时,我们得到的只是错误消息,没有命令行.谁能想到一个"整洁"的方式发出命令行?我能想到的就是将它回显到一个文件,并有一个更高级别的make捕获错误并捕获文件.Hacky,我知道.
测试并且它有效(在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)
这个问题是很老,但对于那些你谷歌搜索的,我想我会在这种情况下,做的是别名make
来make -s
在我的壳(无声模式),只有把@
前缀表示,其中线之前echo
或正在调用的其他诊断命令.当我想要完整的输出时make
,我会通过调用它来覆盖我的别名\make
.
还要注意,在这种情况下,你需要做一些典型的事情,并把它@echo
放在自己的行上,实际的规则命令在不同的行上,没有@
.