2011-08-29 12 views
9

A menudo he visto Makefiles que comienzan comandos con un símbolo "@" para suprimir la salida normal.¿Qué hace el doble símbolo "at" (@@) en un Makefile?

target: test 
    @echo foo 

tiene esta salida:

$ make test 
foo 

Pero a menudo me encuentro con Makefiles @@ delante de comandos:

target: test 
    @@echo foo 

y la salida es idéntica, por lo que yo puedo decir , desde Makefiles con solo un @ antes del comando echo.

¿Cuál es la diferencia?

(El @@ parece ser una práctica común, como se ve por esta búsqueda de Google Code: http://www.google.com/codesearch#search/&[email protected]@echo%20makefile&type=cs)

+0

Por curiosidad, compare @echo foo 1> & 2 y @@ echo foo 1> & 2 – Joshua

+0

@joshua Probé esos dos comandos en un Makefile y ambos obtuve "foo" en una sola línea. –

Respuesta

4

Si examina el código, parece que sólo se despoja de todo el líder @ (o +/-), pero no estoy 100% seguro (es decir, puedes poner tantas @ como quieras) - mira job.c en make source code.

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

tal vez signifique algo especial para Makefiles que se usan en versiones de make que no sean gmake – Erik

+0

@eran Buen hallazgo. ¡Gracias! –

+1

Pero ... si se quita de todos modos, ¿por qué consistentemente poner 2 @? ¿Por qué no solo uno o tres? – Konerak

6

En OpusMake, @@ medios, "muy, muy tranquila". Hace que OpusMake suprima la impresión de los comandos incluso cuando se invoca como make -n. Probablemente alguien, en algún lugar, tenía cierta familiaridad con esa característica, escribió sus archivos MAKE para usarlo, alguien más lo vio y lo copió, y como no rompe otras variantes (al menos, no GNU), simplemente se quedó. .

Cuestiones relacionadas