Domanda

Ho un Makefile costruzione di molti file con lunghe lunghe linee di comando e abbiamo ripulito l'uscita da avere regole come:

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

Ora, questo è grande come il @ sopprime la linea di compilazione essere emessa.Ma quando si ottiene un errore, tutti si ottiene è il messaggio di errore, nessuna riga di comando.Qualcuno può pensare a un "pulito" modo di emettere la riga di comando?Tutto quello che posso pensare di fare eco a un file e hanno un più alto livello di fare rilevare l'errore e il file con cat.Hacky so.

È stato utile?

Soluzione

Testato e funzionante (GNU make in Linux):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false

Altri suggerimenti

Questa domanda è piuttosto vecchio, ma per quelli di voi Googling, penso che quello che devo fare in questa situazione è un alias make per make -s (modalità silenziosa) nel mio guscio, e mettere solo l' @ prefisso prima linea, dove echo o altri comandi di diagnostica sono richiamato.Quando voglio l'output completo di make, Mi sostituiranno il mio alias chiamando come \make.

Si noti inoltre che in questa situazione che avrete bisogno di fare la cosa tipica e mettere il @echo su una linea propria, con la regola attuale comandi su righe separate e senza @’s.

Una soluzione semplice sarebbe quella di utilizzare un semplice script abc come il seguente:

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

Quindi puoi scrivere abc $(COMPILER) $(COPTS) -c -o $@ $< nel tuo Makefile. Si noti che questo non funziona quando si hanno pipe o reindirizzamenti (poiché verranno applicati a <=> anziché al comando che si desidera eseguire).

Puoi anche semplicemente inserire un codice simile direttamente in <=> se è preferibile.

Di recente ho usato un'utilità chiamata logtext per tenere traccia di ciò che era successo durante il corso di un file bat in esecuzione. Dai un'occhiata, potresti trovare questo utile se vuoi sapere quale errore si è verificato dove.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top