Tengo un proyecto que utiliza bibliotecas log4cxx, boost, etc., cuyos encabezados generan muchas advertencias (repetitivas). ¿Hay alguna forma de suprimir las advertencias de la biblioteca incluye (es decir, #include <some-header.h>) o incluye ciertas rutas? Me gustaría usar -Wall y / o -Wextra como de costumbre en el código del proyecto sin que se oculte información relevante. Actualmente uso grep en make output pero me gustaría algo mejor.
126
extern "C"
, lo que generará errores extraños sobre el enlace C si tiene#include
un encabezado C ++ en una-isystem
ruta.Para aquellos que usan CMake, puede modificar sus
include_directories
directivas para incluir el símboloSYSTEM
que suprime las advertencias contra dichos encabezados.fuente
${LIBFOO_USE_FILE}
variable que se utilizará con el comando include () de CMake ?easylogging++
y recibo la misma gran cantidad de advertenciaseasylogging++.h
a pesar de que la carpeta donde reside se ha incluido con laSYSTEM
opción.Puedes usar pragmas. Por ejemplo:
fuente
gcc
cl
ha tenido la capacidad durante años ... A vecesgcc
es un poco lento para adaptarse.Encontré el truco. Para la biblioteca incluye, en lugar de
-Idir
usar-isystem dir
en el archivo MAKE. GCC luego trata el impulso, etc., ya que el sistema incluye e ignora cualquier advertencia de ellos.fuente
#pragma
son instrucciones para el compilador. puede configurar algo antes del #include y deshabilitarlo después.También puedes hacerlo en la línea de comando .
Otra página de GCC específicamente sobre la desactivación de advertencias .
Optaría por usar # pragma's dentro del código fuente y luego proporcionaría una razón sólida (como comentario) de por qué está deshabilitando las advertencias. Esto significaría razonar sobre los archivos de encabezados.
GCC aborda esto clasificando los tipos de advertencia. Puede clasificarlos como advertencias o ignorarlos. Los artículos vinculados anteriormente le mostrarán qué advertencias se pueden deshabilitar.
Nota: también puede dar masajes al código fuente para evitar ciertas advertencias mediante el uso de atributos ; sin embargo, esto te une bastante a GCC.
Nota 2: GCC también usa la interfaz pop / push como se usa en el compilador de microsoft: Microsoft deshabilita las advertencias a través de esta interfaz. Le sugiero que investigue esto más a fondo, ya que no sé si es posible.
fuente
Puede intentar usar encabezados precompilados . Las advertencias no desaparecerán, pero al menos no aparecerán en su compilación principal.
fuente
-isystem
, pero recuerde usarlo tanto en la compilación del encabezado como en el código)Si necesita anular explícitamente un encabezado del sistema, entonces está restringido a pragmas. Puede verificar qué incluye está utilizando a través de la
make depend
salida.Consulte también diagnóstico push-pop para gcc> = 4.6
fuente
Poniendo lo siguiente
desactivará las advertencias de GCC para todos los siguientes códigos en este archivo.
fuente
Debe haber razones para esas advertencias. Estos serán causados por errores en el código que usa la biblioteca o por errores en el código de la biblioteca. En el primer caso, arregle su código. En el segundo caso, deja de usar la biblioteca o, si es código FOSS, arréglalo.
fuente