抑制makefile中命令调用的回显?

时间:2012-04-01 18:36:51

标签: linux unix makefile posix

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

我的问题是我的makefile:

...
run:
     java myprogram

还会将运行我的程序的命令(例如java myprogram)输出到输出文件,这样我的文件就会包含这个额外的行,导致指纹错误。

有没有办法在没有命令调用回显到命令行的情况下执行命令?

4 个答案:

答案 0 :(得分:170)

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

run:
     @java myprogram

正如Oli所说,这是Make而不是Bash的一个特征。

另一方面,Bash永远不会回显正在执行的命令,除非你明确指示它(即使用-x选项)。

答案 1 :(得分:47)

更简单,使用make -s(静音模式)!

答案 2 :(得分:13)

您也可以使用.SILENT

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

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

答案 3 :(得分:2)

通过在行上使用尾部反斜杠扩展命令,可以将命令前面带有@的效果扩展到某个部分。如果需要.PHONY命令来抑制输出,则可以使用以下内容开始该部分:

@printf "..."