2011-08-29 95 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),它只是停留在周围。

相关问题