我经常看到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)
答案 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;
}