双重“at”(@@)符号在Makefile中的作用是什么?

时间:2011-08-29 17:10:00

标签: bash makefile

我经常看到Makefiles用“@”符号启动命令以抑制正常输出。

target: test
    @echo foo

有这个输出:

$ make test
foo

但我常常在命令面前用@@遇到Makefiles:

target: test
    @@echo foo

据我所知,输出在echo命令之前只有一个@的Makefile中是相同的。

有什么区别?

(@@似乎是常见做法,正如此Google代码搜索所示:http://www.google.com/codesearch#search/&q=@@echo%20makefile&type=cs

2 个答案:

答案 0 :(得分:6)

在OpusMake中,@@表示“非常非常安静”。即使调用make -n,它也会导致OpusMake禁止打印命令。可能有人在某个地方对这个功能有一定的了解,编写了他们的makefile以使用它,有人看到它并复制它,并且因为它没有破坏其他make变种(至少,不是GNU make),它只是停留在

答案 1 :(得分:4)

看一下代码,它似乎只是删除所有领先的@(或+/-),但我不是百分百肯定(也就是说,你可以把你想要的那么多@) - 看看在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;
    }