2011-08-29 72 views
9

我經常看到使用「@」符號開始命令的Makefiles壓制正常輸出。雙「at」(@@)符號在Makefile中做什麼?

target: test 
    @echo foo 

有這樣的輸出:

$ make test 
foo 

但我經常遇到生成文件與@@在命令面前:

target: test 
    @@echo foo 

和輸出是相同的,據我可以告訴,從Makefiles只有一個@ echo命令之前。

有什麼區別?

(但@@似乎是常見的做法,這個谷歌代碼搜索所見:http://www.google.com/codesearch#search/&[email protected]@echo%20makefile&type=cs

+0

出於好奇,比較@echo foo 1>&2和@@ echo foo 1>&2 – Joshua

+0

@joshua我在Makefile中測試了這兩個命令,並在一行中輸出「foo」。 –

回答

4

看代碼,似乎它只是去掉所有領先的@(或+/-)但我不是100%肯定的(也就是說,你可以像你想的那樣放置@) - 在源代碼中查看job.c。

while (*p != '\0') 
    { 
     if (*p == '@') 
    flags |= COMMANDS_SILENT; 
     else if (*p == '+') 
    flags |= COMMANDS_RECURSE; 
     else if (*p == '-') 
    child->noerror = 1; 
     else if (!isblank ((unsigned char)*p)) 
    break; 
     ++p; 
    } 
+1

也許這意味着Makefile的特別之處在於gmake以外的其他版本使用 – Erik

+0

@eran好找。謝謝! –

+1

但是,如果它無論如何剝離它,爲什麼一直放2 @的?爲什麼不只是一個或三個? – Konerak

6

在OpusMake,@@手段, 「真的,真的很安靜」。它會導致OpusMake禁止打印命令,即使調用爲make -n。可能有人在某個地方熟悉了這個功能,寫了他們的makefiles來使用它,其他人看到了它並且複製了它,並且由於它沒有破壞其他的變體(至少不是GNU make),它只是停留在周圍。

相關問題