我写了一个程序,用于将其输出打印到stdout的赋值。赋值规范要求创建一个Makefile,当它作为make run > outputFile
调用时应该运行程序并将输出写入一个文件,该文件的SHA1指纹与规范中给出的指纹相同。
我的问题是我的makefile:
...
run:
java myprogram
还会将运行我的程序的命令(例如java myprogram)输出到输出文件,这样我的文件就会包含这个额外的行,导致指纹错误。
有没有办法在没有命令调用回显到命令行的情况下执行命令?
答案 0 :(得分:170)
将@
添加到命令的开头,告诉gmake不要打印正在执行的命令。像这样:
run:
@java myprogram
正如Oli所说,这是Make而不是Bash的一个特征。
另一方面,Bash永远不会回显正在执行的命令,除非你明确指示它(即使用-x
选项)。
答案 1 :(得分:47)
更简单,使用make -s
(静音模式)!
答案 2 :(得分:13)
答案 3 :(得分:2)
通过在行上使用尾部反斜杠扩展命令,可以将命令前面带有@
的效果扩展到某个部分。如果需要.PHONY
命令来抑制输出,则可以使用以下内容开始该部分:
@printf "..."