抑制makefile中命令调用的回声?
Posted
技术标签:
【中文标题】抑制makefile中命令调用的回声?【英文标题】:Suppress echo of command invocation in makefile? 【发布时间】:2012-04-15 13:30:43 【问题描述】:我为一个作业编写了一个程序,该程序应该将其输出打印到标准输出。分配规范需要创建一个 Makefile,当作为 make run > outputFile
调用时,它应该运行程序并将输出写入一个文件,该文件具有与规范中给出的相同的 SHA1 指纹。
我的问题是我的makefile:
...
run:
java myprogram
还将运行我的程序(例如 java myprogram)的命令打印到输出文件,以便我的文件包含导致指纹错误的额外行。
有没有什么方法可以在命令调用不回显到命令行的情况下执行命令?
【问题讨论】:
【参考方案1】:在命令开头添加@
告诉gmake 不要打印正在执行的命令。像这样:
run:
@java myprogram
正如 Oli 所建议的,这是 Make 的一项功能,而不是 Bash 的一项功能。
另一方面,Bash 永远不会回显正在执行的命令,除非您明确告诉它这样做(即使用 -x
选项)。
【讨论】:
+1。但为了澄清 OP 的困惑,或许值得澄清的是,这是 Make 的一个特性,而不是 Bash 的特性。 @OliCharlesworth:有道理,补充说。谢谢。 有没有办法禁用所有回声?或者在某个部分关闭它,然后再打开? @Benubirdmake -s
这样做了,恕我直言,无论如何这里是一个更好的解决方案。它最近作为此问题的单独答案发布。
这不适用于 if ... then 语句 :( 有什么想法吗?【参考方案2】:
更简单,使用make -s
(静音模式)!
【讨论】:
赞成:这应该是这里真正接受的答案。使用@
命令在您的 Makefile 中添加代码会使调试变得困难并增加很多混乱。
我同意这是要走的路 - 但请注意,在最初的问题描述中,我不会是调用 make 的人 - 我的导师会。因此,我无法控制传入的标志。我需要控制 makefile 中的输出。支持现实世界中最实用的解决方案。
你可以自己控制这个,使用.SILENT:
目标。见make.mad-scientist.net/managing-recipe-echoing
实际上,如果您在-Wall
上发出警告,它仍然会打印它们。当然,如果您也想查看警告,为什么还要使用-s
?【参考方案3】:
你也可以使用.SILENT
.SILENT: run
hi:
echo "Hola!"
run:
java myprogram
在这种情况下,make hi
会输出命令,但make run
不会输出。
【讨论】:
【参考方案4】:在命令前加上@
的效果可以通过在行上使用尾随反斜杠扩展命令来扩展至一个部分。如果需要 .PHONY
命令来抑制输出,则可以使用以下内容开始该部分:
@printf "..."
【讨论】:
以上是关于抑制makefile中命令调用的回声?的主要内容,如果未能解决你的问题,请参考以下文章