Domanda

come posso formattare l'output make ( !! soltanto modificando il file di progetto qmake !! ). Le mie linee di compilazione continuare a crescere, e l'uno-line-avvertimenti / errori quasi scompaiono tra di loro.

Sto pensando a qualcosa di simile

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

grazie per quanto riguarda

È stato utile?

Soluzione

In qmake, è possibile aggiungere un'opzione di configurazione invisibile:

CONFIG += silent

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

Che dovrebbe sopprimere la maggior parte della produzione, e solo le linee di stampa come "la compilazione A. Ó", insieme con i vostri avvisi e gli errori. Credo che questo sia simile a quella direttiva make di .SILENT. (credo che sia quello ...)

Si consiglia di prestare attenzione a questo, però, perché sopprime un sacco di informazioni che parser errore piace usare. Ad esempio, se si sta compilando con una configurazione SUBDIRS, esso non stamperà quando cambia alle diverse directory.

Altri suggerimenti

Ci sono diversi approcci. E potete farli configurabile.

  • Se Aggiungi segno @ di fronte alla riga all'interno regola, il comando stesso non verrà stampato, ma la sua produzione sarà.
  • Se Aggiungi -Werror al tuo CFLAGS variabile (ne avete uno, non si tratta di una pratica comune?!), Sicuramente sarà non perdere alcun preavviso - la compilazione si ferma dopo il primo.
  • Puoi reindirizzare lo standard output del comando per /dev/null , lasciando solo flusso di errore (questo non è per il vostro caso particolare, perché gcc di solito non produce in uscita, ma può essere utile per gli altri comandi) .

Purtroppo, per qmake vale 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 sarà spostato ad un'altra domanda appare appena un uno).

Per solito fanno è possibile utilizzare tutto - si può fare tutto configurabile! Ecco l'esempio:

trace?=short

ifeq ($(trace),short)
  suppress_echo=@
  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 l'operatore ?= invece di solito =!) E le regole si espanderà a tale versione

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

quello che darà molto di cui hai bisogno.

Tale approccio, con la configurazione, è utilizzato nel codice di produzione. Ad esempio, ho visto in makefiles IcedTea di Ubuntu.

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

Semplice esempio:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top