Pergunta

Como posso formatar a saída make ( !! somente mudando o arquivo de projeto qmake !! ). Minhas linhas de compilação continuam crescendo, e os de uma linha-avisos / erros quase desaparecer entre eles.

Estou pensando em algo como

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

graças em relação

Foi útil?

Solução

Em qmake, você pode adicionar uma opção de configuração silenciosa:

CONFIG += silent

(nota:.. Eu acho que é o comando que é algo semelhante a isto)

Qual deve suprimir a maior parte da saída, e só imprimir linhas como "compilar a.o", juntamente com os seus avisos e erros. Eu acredito que esta é semelhante à directiva make de .SILENT. (eu acho que é o único ...)

Você pode querer ter cuidado com isso, no entanto, porque suprime um monte de informações que analisadores de erro gostaria de uso. Por exemplo, se você está compilando com uma configuração SUBDIRS, não vai imprimir quando se muda para os diretórios diferentes.

Outras dicas

Existem diferentes abordagens. E você pode fazê-los configurável.

  • Se você sinal @ Adicionar em frente da linha dentro de regra, o próprio comando não será impressa, mas a sua saída vai.
  • Se você add -Werror ao seu CFLAGS variável (você tem um, não sabe É uma prática comum?!), Você definitivamente não vai perder nenhum aviso - a construção vai parar após a primeira.
  • Você pode redirecionar a saída padrão de seu comando para /dev/null , deixando apenas fluxo de erro (isto não é para o seu caso particular, porque gcc geralmente não produz saída, mas pode ser útil para outros comandos) .

Infelizmente, para qmake apenas a segunda abordagem se aplica. Adicionar ao seu arquivo de projeto:

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror

E os makefiles gerados irá utilizar estes sinalizadores quando eles invocam compilador, de modo a construir vai parar em cada aviso.


(esta secção será movido para outra pergunta, logo um deles aparece).

Para fazer costume, você pode usá-lo todos - você pode fazer tudo configurável! Aqui está o exemplo:

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)

Então, se você invocar make assim:

$ make trace=full

ele irá imprimir tudo. Se você chamar

$ make

O valor short será usado por padrão (note o operador ?= vez de = de costume!) E as regras se expandirá para tal versão

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

o que vai dar tanto quanto você precisa.

Tal abordagem, com a configuração, é usado no código de produção. Por exemplo, eu vi em makefiles IcedTea do Ubuntu.

Você pode suprimir a impressão com '@' e repetir o que você deseja ver:

Exemplo simples:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top