Como compilar sem que os avisos sejam tratados como erros?


94

O problema é que o mesmo código que compila bem no Windows, não consegue compilar no Ubuntu. Sempre que recebo este erro:

cc1: warnings being treated as errors

Agora, é uma grande base de código e não gosto de corrigir todos os avisos.

Existe alguma maneira de compilar com êxito, apesar dos avisos?


1
Eu sugiro fortemente que você tente corrigir os avisos. Se não imediatamente, gradualmente. Depois de se livrar do -Werror, você pode adicioná-lo novamente por diretório, depois de remover os avisos.
ugoren

Mesmo se você compilar com sucesso, ele pode não funcionar da maneira que você espera. Algumas pessoas escreveram um código que funciona muito bem no Windows, mas travou imediatamente no Linux.
Dennis Meng

Obrigado a todos por seus comentários e respostas úteis. De acordo com o requisito, parece que devo corrigir todos os avisos que iniciei. Mas agora o aviso que estou recebendo é de sqlite3.c: assumindo que o estouro assinado não ocorre ao assumir que (X - c) <= X é sempre verdadeiro
Saurabh Verma

Respostas:


83

Claro, encontre onde -Werrorestá definido e remova o sinalizador. Então os avisos serão apenas avisos.


2
Obrigado Daniel, mas não há sinalizador -Werror definido no meu projeto. Devo procurar em outro lugar?
Saurabh Verma

13
Em algum lugar ele deve ser definido, por padrão, os avisos não são tratados como erros por nenhum compilador que eu conheço. Se você não conseguir encontrá-lo, pode tentar substituí-lo por -Wno-error, como sugeriu o Nightcracker. Isso deve funcionar, a menos que -Werrorseja passado após os sinalizadores que você definiu no CFLAGSmakefile.
Daniel Fischer

31

Você pode fazer todos os avisos sendo tratados como tal usando -Wno-error. Você pode fazer avisos específicos sendo tratados como tal, usando -Wno-error=<warning name>onde <warning name>é o nome do aviso que você não deseja que seja tratado como um erro.

Se você deseja desativar totalmente todos os avisos, use -w(não recomendado).


Fonte: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html



4

Se você está compilando o kernel do Linux. Por exemplo, se você deseja desativar o aviso de que "não utilizado, mas variável definida" foi tratado como erro. Você pode adicionar uma declaração:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

no seu Makefile


3

Obrigado por todas as sugestões úteis. Finalmente, certifiquei-me de que não havia avisos no meu código, mas novamente recebi este aviso do sqlite3:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

que corrigi adicionando o seguinte CFLAG:

-fno-strict-overflow

Muitos avisos estão lá para apontar para construções problemáticas em seu código. Desativá-los permitirá que você siga em frente em uma perspectiva curta, mas você nunca saberá se esses problemas voltarão para assombrá-lo no longo prazo.
Benjamin Bannier

1
Sim você está certo. Eu quis dizer que tenho certeza de que meu código está livre de avisos (eu não desativei todos os avisos)
Saurabh Verma

3

-Walle as -Werroropções do compilador podem causar isso, verifique se eles são usados ​​nas configurações do compilador.


3

Solução:

CFLAGS=-Wno-error ./configure
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.