En el proyecto de software en el que estoy trabajando, utilizamos ciertas bibliotecas de terceros que, por desgracia, producen advertencias gcc molestas. Nos esforzamos por limpiar todo el código de advertencias y queremos habilitar el indicador treat-warnings-as-errors (-Werror) en GCC. ¿Hay alguna manera de hacer que estas advertencias generadas por terceros, que no podemos solucionar, desaparezcan?Cómo eliminar advertencias externas de lib/terceros en GCC
Respuesta
Supongo que está hablando de las advertencias procedentes de los encabezados de biblioteca de terceros.
La solución específica GCC sería crear otro archivo de cabecera de envoltura que tiene esencialmente las dos líneas:
#pragma GCC system_header
#include "real_3rd_party_header.h"
Y el uso de la envoltura en lugar de la cabecera del partido de tercera originales.
Compruebe another SO response detallando el pragma. En esencia, 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 sé 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 cabecera de terceros. Un archivo de encabezado de biblioteca que no puede cambiar podría contener una construcción que provoca advertencias (probablemente benignas). luego envolver el archivo con su propia versión que #Includes la cabecera original y se apaga de forma selectiva las advertencias ruidosos para que alcance solamente, y luego #Include su envoltorio durante el resto de su proyecto.
Uso -isystem
Ejemplo:
gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o
Con -isystem ningún aviso a impulso: D
Esta es una solución mucho mejor que crear envoltorios. –
Si está usando CMake, se puede lograr esto mediante la adición SYSTEM
a include_directories
:
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
He probado esto bajo GCC y funciona muy bien, pero no hace nada bajo MSVC. No es inesperado porque MSVC no parece tener ninguna forma de especificar los directorios de encabezado del sistema (es decir, el sistema de GCC), pero algo a tener en cuenta si necesita compatibilidad con MSVC. – Kevin
No parece hacer nada por mí en Xcode/Clang tampoco. –
- 1. desactivar advertencias específicas en gcc
- 2. gcc Advertencias de Woverloaded-virtual
- 3. Desactivar todas las advertencias gcc
- 4. gcc: cómo no compilar con las advertencias
- 5. advertencias del usuario en msvc AND gcc?
- 6. ¿Cómo se suprimen las advertencias del enlazador GCC?
- 7. Deshabilitar las advertencias condicionalmente con qmake/gcc?
- 8. Cómo eliminar las advertencias LNK4217 y LNK4049
- 9. Obtener la lista de advertencias predeterminadas de GCC
- 10. SCons: guardar/redirigir salida de texto gcc (advertencias)
- 11. Proguard me dice 'Corrija primero las advertencias anteriores'. ¿Cómo abordar las referencias de jarras externas?
- 12. GCC y makefile: mostrar solo errores y advertencias
- 13. advertencias de iphone de armv7
- 14. eliminar selectivamente mensaje de advertencia GCC
- 15. ¿Cómo puedo ocultar las advertencias "definidas pero no usadas" en GCC?
- 16. Cómo activar las advertencias de gcc para una declaración de devolución olvidada?
- 17. ¿Cómo usar fuentes externas?
- 18. Prueba de referencias externas indefinidas en Linux
- 19. Cómo suprimir advertencias en encabezados externos en Visual C++
- 20. Cómo eliminar filas en tablas que contienen claves externas a otras tablas
- 21. Suprimir -Wunknown-pragmas de advertencia en GCC
- 22. ¿Cómo deshacerse de la conversión obsoleta de la constante de cadena a las advertencias de 'char *' `en GCC?
- 23. Cómo usar claves externas en SQL Buddy?
- 24. Funciones externas en C++
- 25. ¿Cómo funcionan las claves externas?
- 26. funciones externas en haskell?
- 27. ¿Cómo comienzo aplicaciones externas en C# WPF?
- 28. Suprimir advertencias obsoletas en Xcode
- 29. En gcc, ¿cómo silenciar la advertencia permisiva?
- 30. ¿Dónde encontrar una lista completa de advertencias y errores de gcc?
¿Qué versión de gcc? –
Greg - gracias, haré. Sam - g ++ 4.1.2 – Michael