2012-04-01 29 views
61

我寫了一個應用程序,該應用程序應該將其輸出打印到標準輸出。賦值規範要求創建一個Makefile,當調用make run > outputFile時,應運行該程序並將輸出寫入一個文件,該文件的SHA1指紋與規範中給出的指紋相同。在makefile中抑制命令調用的回顯?

我的問題是我的makefile:

... 
run: 
    java myprogram 

也打印它運行我的程序(例如,Java myprogram)輸出文件,讓自己的文件中包含這個額外的行導致指紋是錯誤的命令。

有沒有任何方法可以執行一個命令,而不用命令調用回顯到命令行?

回答

110

@添加到命令的開頭,告訴gmake不要打印正在執行的命令。像這樣:

run: 
    @java myprogram 

正如Oli所說,這是Make和Bash的一個特性。另一方面,Bash絕對不會回顯正在執行的命令,除非您明確地告訴它(即使用-x選項)。

+3

+1。但僅僅爲了澄清OP的困惑,或許值得澄清的是,這是Make的一個特徵,而不是Bash的特徵。 – 2012-04-01 18:42:45

+0

@OliCharlesworth:有道理,補充說。謝謝。 – 2012-04-01 18:45:50

+0

是否有禁用所有回聲的方法?或者關閉一段,然後再打開? – Benubird 2015-04-22 07:58:14

0

通過在行上使用尾部反斜槓擴展命令,可以將帶有@的命令前面的效果擴展爲「節」。如果需要假冒命令 來抑制輸出,可以用 @printf「」\

+1

你可以給我們一個代碼的例子嗎? – Dennis 2018-01-07 16:01:01

25

開始部分更簡單:make -s(靜音模式)!

+0

Upvote:這真的應該是這裏接受的答案,用'@'命令來灌製你的Makefile – tripleee 2016-02-17 08:52:42

+4

我同意這是要走的路 - 但請注意,在原始問題描述中,我不會是一個調用make的人 - 我的導師會是這樣的。沒有控制傳入的標誌。我需要控制makefile中的輸出。Upvote在現實世界中是最實際的解決方案。 – noobler 2016-02-17 14:30:23