2009-09-29 7 views
9

Come posso formattare l'output di creazione (!! cambiando solo il file di progetto qmake !!). Le mie linee di compilazione continuano a crescere e gli avvisi/errori su una riga quasi scompaiono tra di loro.Come formattare/modificare l'output di generazione qmake

Sto pensando a qualcosa di simile

$(CC) in.ext -o out.ext 

grazie per quanto riguarda

risposta

16

In qmake, è possibile aggiungere una silenziosa opzione di configurazione:

CONFIG += silent 

(nota:.. Penso che questo sia il comando E 'qualcosa di simile a questo)

Che dovrebbe sopprimere la maggior parte della produzione, e stampa solo linee come "compiling ao", insieme ai tuoi avvisi ed errori. Credo che questo sia simile alla direttiva .SILENT. di (penso sia quella ...)

Tuttavia, si consiglia di fare attenzione, perché sopprime molte informazioni che i parser di errore amano utilizzare. Ad esempio, se si sta compilando con una configurazione SUBDIRS, non verrà stampata quando si passa alle diverse directory.

+0

fantastico. esattamente quello di cui avevo bisogno –

0

È possibile sopprimere la stampa con '@' e l'eco che cosa si vuole vedere: Esempio

Semplice:

out.ext: $(OBJ) 
    @echo $(CC) -o out.ext 
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC) 
+0

Uh Voglio rendere la magia non contenuta e solo dentro qmake. Dispiace per la confusione. –

+1

OP chiesto qmake –

5

Ci sono diversi approcci. E puoi renderli configurabili.

  • Se si aggiunge @ segno davanti alla riga all'interno regola, il comando stesso non verrà stampata, ma la sua uscita sarà.
  • Se si aggiunge -Werror alla variabile CFLAGS (ne avete uno, non è vero E 'una pratica comune?!), Sicuramente sarà non perdere alcun preavviso - la compilazione si ferma dopo il primo.
  • È possibile reindirizzare l'output standard del comando su /dev/null, lasciando solo il flusso di errore (questo non è per il caso particolare, perché gcc di solito non produce output ma può essere utile per altri comandi).

Sfortunatamente, per qmake si applica solo il secondo approccio. Aggiungere al file di progetto:

QMAKE_CFLAGS+=-Werror 
QMAKE_CXXFLAGS+=-Werror 

E i makefile generati utilizzerà queste bandiere quando invocano compilatore, in modo che il build fermarsi ad ogni avvertimento.


(questa sezione verrà spostata in un'altra domanda non appena ne viene visualizzata una).

Per il solito make puoi usare tutto - puoi renderlo tutto configurabile! Ecco l'esempio:

trace?=short 

ifeq ($(trace),short) 
    [email protected] 
    redirect_to_null=1>/dev/null 

else ifeq ($(trace),full) 
    suppress_echo= 
    redirect_to_null= 

else ifeq ($(trace),werror) 
    CFLAGS+=-Werror 

else 
    $(error Incorrect trace type "$(trace)"!) 
endif 

# Thanks to Martin York for the source of this copy-pasted code 
out.ext: $(OBJ) 
    @echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null) 
    $(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null) 

Quindi, se si richiama make in questo modo:

$ make trace=full 

stamperà tutto. Se si richiama

$ make 

il valore short verrà utilizzato per default (notare il ?= operatore invece di solito =!) E le regole si espanderanno a tale versione

out.ext: out.o 
    @echo cc -o out.ext 1>/dev/null 
    @cc -o out.ext out.o 1>/dev/null 

ciò che vi darà tanto quanto si bisogno.

Tale approccio, con configurazione, viene utilizzato nel codice di produzione.Ad esempio, l'ho visto nei makefile IcedTea di Ubuntu.

+0

Uh Voglio rendere la magia non contenuta e solo all'interno di qmake. Dispiace per la confusione. –

+0

+1: per -Werror. Questo è il miglior suggerimento IMO e questo _can_ può essere fatto nel tuo file di progetto. – Troubadour

+0

@hydroes: modificato la mia risposta per cercare di soddisfare le vostre esigenze –