Como formato / mudança de saída qmake construção
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
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 seuCFLAGS
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)