Eu tenho um projeto que usa as bibliotecas log4cxx, boost, etc. cujos cabeçalhos geram muitos avisos (repetitivos). Existe uma maneira de suprimir avisos de inclusões de biblioteca (por exemplo, #include <some-header.h>) ou inclusões de determinados caminhos? Eu gostaria de usar -Wall e / ou -Wextra como de costume no código do projeto sem que as informações relevantes sejam ocultadas. Atualmente, uso grep no make output, mas gostaria de algo melhor.
126
extern "C"
, causando erros estranhos na ligação C se você tiver#include
um cabeçalho C ++ em um-isystem
caminho.Para aqueles que usam o CMake, você pode modificar suas
include_directories
diretivas para incluir o símboloSYSTEM
que suprime avisos contra esses cabeçalhos.fonte
${LIBFOO_USE_FILE}
variável que será usada com o comando include () do CMake ?easylogging++
e recebo a mesma quantidade enorme de avisos,easylogging++.h
mesmo que a pasta em que ele reside tenha sido incluída com aSYSTEM
opção.Você pode usar pragmas. Por exemplo:
fonte
gcc
cl
tem capacidade há anos ... Às vezesgcc
é um pouco lento para se adaptar.Eu encontrei o truque. Para biblioteca inclui, em vez de
-Idir
usar-isystem dir
no makefile. O GCC trata o impulso etc., pois o sistema inclui e ignora todos os avisos deles.fonte
#pragma
são instruções para o compilador. você pode definir algo antes do #include e desabilitá-lo depois.Você também pode fazer isso na linha de comando .
Outra página do GCC especificamente sobre a desativação de avisos .
Eu optaria pela opção de usar # pragma's no código-fonte e, em seguida, fornecer uma boa razão (como um comentário) do motivo pelo qual você está desativando os avisos. Isso significaria raciocínio sobre os arquivos de cabeçalho.
O GCC aborda isso classificando os tipos de aviso. Você pode classificá-los como avisos ou a serem ignorados. Os artigos vinculados anteriormente mostrarão quais avisos podem ser desativados.
Nota: você também pode massagear o código fonte para evitar certos avisos usando atributos ; no entanto, isso o vincula bastante ao GCC.
Nota2: O GCC também usa a interface pop / push, conforme usada no compilador da microsoft - a Microsoft desativa os avisos por essa interface. Sugiro que você investigue mais, pois não sei se é possível.
fonte
Você pode tentar usar cabeçalhos pré-compilados . Os avisos não desaparecem, mas pelo menos os não aparecem na sua compilação principal.
fonte
-isystem
, mas não se esqueça de usá-lo tanto na compilação do cabeçalho e no código)Se você precisar substituir explicitamente um cabeçalho do sistema, estará restrito a pragmas. Você pode verificar qual inclui o que está usando via
make depend
saída.Consulte também push-pop de diagnóstico para gcc> = 4.6
fonte
Colocando o seguinte
desativará os avisos do GCC para todos os códigos a seguir neste arquivo.
fonte
Deve haver razões para esses avisos. Isso será causado por erros no seu código que usa a biblioteca ou por erros no próprio código da biblioteca. No primeiro caso, corrija seu código. No segundo caso, pare de usar a biblioteca ou, se for o código FOSS, corrija-o.
fonte