¿Cómo suprimir las advertencias de GCC de los encabezados de la biblioteca?

Resuelto AdSR asked hace 15 años • 10 respuestas

Tengo un proyecto que utiliza bibliotecas log4cxx, boost, etc. cuyos encabezados generan muchas advertencias (repetitivas). ¿Existe alguna manera de suprimir las advertencias de las inclusiones de la biblioteca (es decir, #include <some-header.h>) o las inclusiones de determinadas rutas? Me gustaría usar -Wall y/o -Wextra como de costumbre en el código del proyecto sin que se oscurezca la información relevante. Actualmente uso grep para generar resultados, pero me gustaría algo mejor.

AdSR avatar Dec 08 '09 20:12 AdSR
Aceptado

Para aquellos que usan CMake, pueden modificar sus include_directoriesdirectivas para incluir el símbolo SYSTEMque suprime las advertencias contra dichos encabezados.

include_directories(SYSTEM "${LIB_DIR}/Include")
                    ^^^^^^
Drew Noakes avatar Oct 10 '2014 10:10 Drew Noakes

Puede intentar incluir encabezados de biblioteca usando -isystemen lugar de -I. Esto los convertirá en "encabezados del sistema" y GCC no informará advertencias sobre ellos.

Phi avatar Dec 14 '2009 12:12 Phi

Puedes usar pragmas. Por ejemplo:

// save diagnostic state
#pragma GCC diagnostic push 

// turn off the specific warning. Can also use "-Wall"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>

// turn the warnings back on
#pragma GCC diagnostic pop
andrewrjones avatar Nov 21 '2012 11:11 andrewrjones

Encontré el truco. Para la biblioteca incluye, en lugar de -Idirusarlo -isystem diren el archivo MAKE. Luego, GCC trata el impulso, etc. como si el sistema los incluye e ignora sus advertencias.

AdSR avatar Dec 14 '2009 10:12 AdSR