¿Cómo suprimir las advertencias de GCC de los encabezados de la biblioteca?
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.
Para aquellos que usan CMake, pueden modificar sus include_directories
directivas para incluir el símbolo SYSTEM
que suprime las advertencias contra dichos encabezados.
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
Puede intentar incluir encabezados de biblioteca usando -isystem
en lugar de -I
. Esto los convertirá en "encabezados del sistema" y GCC no informará advertencias sobre ellos.
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
Encontré el truco. Para la biblioteca incluye, en lugar de -Idir
usarlo -isystem dir
en el archivo MAKE. Luego, GCC trata el impulso, etc. como si el sistema los incluye e ignora sus advertencias.