2011-12-22 377 views

回答

120

這意味着「不要在輸出中回顯此命令。」所以這個規則是說:「執行shell命令:並且不回顯輸出

當然,shell命令:是no-op,所以這就是說」什麼也不做,不要說「。

爲什麼?

這裏的技巧是,你有兩種不同的語法的一個不起眼的組合。該化妝(1)語法開始@使用一個動作的,這簡直是不要回顯命令,所以像

always: 
     @echo this always happens 

不會發出

echo this always happens 
    this always happens 

現在,一個規則的動作部分可以是任何命令,包括:。擊幫助解釋了這個問題,以及在任何地方:

$ help : 
:: : 
    Null command. 

    No effect; the command does nothing. 

    Exit Status: 
    Always succeeds. 
+0

感謝,有沒有地方,對此進行了更詳細的?我不確定「out-ut」是什麼。 – cdwilson 2011-12-22 23:40:12

+9

不要嘲笑我的打字,你也會有一天變老。 – 2011-12-22 23:46:05

+0

謝謝,這真的很有幫助!在我讀到你的答案之前,我一直認爲'@:'是一些有趣的作曲家(我沒有意識到它是兩件事的結合......) – cdwilson 2011-12-23 00:01:01

28

對於那些好奇,爲什麼你可以這樣做,如果你想假裝喜歡的事,做它是有用的,所以,使不輸出「沒有什麼可完成「你的目標。

一個例子是如果你有一個你永遠執行的假目標,並且你在命令中有一堆條件。你至少想要一些事情來防止這些情況出現錯誤而沒有完成。

例如(在Linux的腳本/ Makefile.clean):

__clean: $(subdir-ymn) 
ifneq ($(strip $(__clean-files)),) 
    +$(call cmd,clean) 
endif 
ifneq ($(strip $(__clean-dirs)),) 
    +$(call cmd,cleandir) 
endif 
ifneq ($(strip $(clean-rule)),) 
    +$(clean-rule) 
endif 
    @: 
+0

啊哈,就這樣! – 2014-07-14 02:17:27

相關問題