c++ - compiler - Cómo eliminar las advertencias externas de lib/terceros en GCC
gcc ubuntu (4)
Ejemplo de uso del -isystem
:
gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o
Con -istema de advertencia de NO sobre boost: D
Esta pregunta ya tiene una respuesta aquí:
En el proyecto de software en el que estoy trabajando, usamos ciertas bibliotecas de terceros que, lamentablemente, producen molestas advertencias de gcc. Nos estamos esforzando por limpiar todo el código de advertencias y queremos habilitar el indicador de tratamiento de advertencias-como-errores (-Werror) en GCC. ¿Hay una manera de hacer que estas advertencias generadas por terceros, que no podemos corregir, desaparezcan?
Si está utilizando CMake, puede lograrlo agregando SYSTEM
a include_directories
:
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
Supongo que está hablando de las advertencias de los encabezados de la biblioteca de terceros.
La solución específica de GCC sería crear otro archivo de encabezado de envoltorio que tenga esencialmente las dos líneas:
#pragma GCC system_header
#include "real_3rd_party_header.h"
Y use la envoltura en lugar del encabezado original de terceros.
Marque otra respuesta SO que detalla el pragma. Esencialmente le dice a GCC que esto (con los archivos incluidos recursivamente) es un encabezado del sistema, y no se deben generar mensajes de advertencia.
De lo contrario, no estoy al tanto de cómo se pueden desactivar las advertencias provenientes del código de terceros. Excepto por la fuerza bruta, por supuesto: en el sistema de compilación, configure los archivos que se construirán con las advertencias desactivadas.
http://www.artima.com/cppsource/codestandards.html
Ejemplo 1: Un archivo de encabezado de terceros. Un archivo de encabezado de biblioteca que no puede cambiar podría contener una construcción que provoque advertencias (probablemente benignas). Luego envuelva el archivo con su propia versión que # incluye el encabezado original y desactiva selectivamente las advertencias ruidosas solo para ese alcance, y luego #incluya su envoltorio en el resto de su proyecto.