Что делает двойной символ «at» (@@) в Makefile? - PullRequest
10 голосов
/ 29 августа 2011

Я часто видел Make-файлы, которые запускают команды с символом «@» для подавления нормального вывода.

target: test
    @echo foo

Имеет этот вывод:

$ make test
foo

Но я часто сталкиваюсь с Makefiles с @@ перед командами:

target: test
    @@echo foo

И, насколько я могу судить, выходные данные идентичны из Makefiles с одним @ перед командой echo.

Какая разница?

(Кажется, что @@ является обычной практикой, как видно из поиска Google Code: http://www.google.com/codesearch#search/&q=@@echo%20makefile&type=cs)

Ответы [ 2 ]

6 голосов
/ 30 августа 2011

В OpusMake @@ означает «очень, очень тихо». Это заставляет OpusMake подавлять печать команд, даже когда вызывается как make -n. Возможно, кто-то где-то был знаком с этой функцией, написал свои make-файлы для ее использования, кто-то другой увидел и скопировал ее, и, поскольку она не нарушает другие варианты make (по крайней мере, не GNU make), он просто застрял .

4 голосов
/ 29 августа 2011

Глядя на код, кажется, что он просто удаляет все первые @ (или +/-), но я не уверен на 100% (то есть вы можете поместить туда столько @, сколько пожелаете)в файле job.c в исходном коде make.

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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...