2012-04-01 11 views
61

Ho scritto un programma per un compito che dovrebbe stampare il suo output su stdout. Le specifiche di assegnazione richiedono la creazione di un Makefile che, invocato come make run > outputFile, dovrebbe eseguire il programma e scrivere l'output in un file, che ha un'impronta digitale SHA1 identica a quella fornita nelle specifiche.Elimina eco di richiamo del comando in makefile?

Il mio problema è che il mio makefile:

... 
run: 
    java myprogram 

stampa anche il comando che gestisce il mio programma (ad es myprogram java) per il file di output, in modo che il mio file include questa linea aggiuntiva che causa l'impronta digitale di sbagliare .

Esiste un modo per eseguire un comando senza il richiamo del comando che fa eco alla riga di comando?

risposta

110

Aggiungere @ all'inizio del comando per indicare a gmake di non stampare il comando in esecuzione. In questo modo:

run: 
    @java myprogram 

Come suggerito da Oli, questa è una funzionalità di Make e non di Bash.

D'altra parte, Bash non eseguirà mai comandi echo eseguiti a meno che non glielo dica di farlo esplicitamente (cioè con l'opzione -x).

+3

+1. Ma solo per chiarire la confusione dell'OP, forse è utile chiarire che questa è una caratteristica di Make, non di Bash. –

+0

@OliCharlesworth: ha senso, ha aggiunto quello. Grazie. –

+0

C'è un modo per disattivare tutti gli echos? O di spegnerlo per una sezione e riaccenderlo più tardi? – Benubird

0

L'effetto di precedere il comando con un @ può essere esteso a una "sezione" estendendo il comando utilizzando una barra rovesciata finale sulla riga. Se si desidera un comando fasullo per sopprimere l'output, è possibile iniziare la sezione con @printf "" \

+1

Potresti fornirci un esempio con il codice? – Dennis

25

Ancora più semplice: make -s (modalità silenziosa)!

+0

Upvote: Questa dovrebbe essere la risposta accettata qui. Spruzzare il tuo Makefile con i comandi '@' È difficile fare il debug e aggiungere un sacco di confusione – tripleee

+4

Sono d'accordo che questa è la strada da percorrere - ma notate, nella descrizione del problema originale, non sarei quello che invoca make - il mio istruttore sarebbe. Nessun controllo sulle bandiere passate. Avevo bisogno di controllare l'output dall'interno del makefile. Tuttavia, sono in aumento per la soluzione più pratica nel mondo reale. – noobler

Problemi correlati