在makefile中抑制命令调用的回声?

我为赋值写了一个程序,它应该将输出输出到stdout。赋值规范要求创建一个Makefile,当作为make run > outputFile调用时,它应该运行程序并将输出写入一个文件,该文件具有与规范中给出的相同的SHA1指纹。

我的问题是我的makefile:

...
run:
java myprogram

还将运行我的程序(例如Java myprogram)的命令打印到输出文件中,因此我的文件包含了导致指纹错误的额外行。

是否有任何方法可以在不向命令行回显命令调用的情况下执行命令?

114916 次浏览

在命令的开头添加@,告诉gmake不要打印正在执行的命令。是这样的:

run:
@java myprogram

正如Oli所建议的,这是Make的特性,而不是Bash的特性。

另一方面,Bash永远不会回显正在执行的命令,除非你显式地告诉它这样做(即使用-x选项)。

在命令前面加上@的效果可以通过在该行上使用后面的反斜杠扩展命令来扩展到一个section。如果希望使用.PHONY命令来抑制输出,可以这样开始该节:

@printf "..."

更简单的是,使用make -s(静默模式)!

你也可以使用.SILENT

.SILENT: run
hi:
echo "Hola!"
run:
java myprogram

在这种情况下,make hi将输出命令,但make run将不输出。