2011-08-29 13 views
9

Ho spesso visto Makefile che avvia i comandi con un simbolo "@" per sopprimere l'output normale.Cosa fa il doppio simbolo "at" (@@) in un Makefile?

target: test 
    @echo foo 

ha questa uscita:

$ make test 
foo 

Ma incontro spesso Makefile con @@ davanti comandi:

target: test 
    @@echo foo 

e l'uscita è identico, per quanto posso dire , da Makefile con solo uno @ prima del comando echo.

Qual è la differenza?

(Il @@ sembra essere pratica comune, come si è visto da questa ricerca Google Code: http://www.google.com/codesearch#search/&[email protected]@echo%20makefile&type=cs)

+0

Per curiosità, confrontare @echo foo 1> & 2 e @@ echo foo 1> & 2 – Joshua

+0

@joshua Ho testato questi due comandi in un Makefile e ho emesso "foo" su una singola riga. –

risposta

4

Guardando il codice, sembra che solo spoglia tutti i principali @ (o +/-), ma non sono sicuro al 100% (cioè, puoi metterlo quanti ne vuoi @) - guarda job.c per creare il codice sorgente.

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

forse significa qualcosa di speciale per i Makefile che vengono utilizzati dalle versioni di make diverso da gmake – Erik

+0

@eran Buona ricerca. Grazie! –

+1

Ma .. se lo toglie comunque, perché mettere consistentemente 2 @ 's? Perché non solo uno o tre? – Konerak

6

In OpusMake, @@ mezzi, "molto, molto tranquillo". Fa sì che OpusMake sopprima la stampa dei comandi anche quando viene invocato come make -n. Probabilmente qualcuno, da qualche parte, aveva una certa dimestichezza con quella caratteristica, ha scritto i loro makefile per usarlo, qualcuno l'ha visto e copiato, e dal momento che non rompe altre varianti di make (almeno, non GNU make), si è semplicemente bloccato .