¿Cómo suprimir las advertencias de GCC de los encabezados de la biblioteca?
Tengo un proyecto que usa log4cxx, boost, etc. bibliotecas cuyos encabezados generan muchas advertencias (repetitivas). ¿Hay una manera de suprimir las advertencias de la biblioteca includes (es decir, #include
8 answers
Puede intentar incluir encabezados de biblioteca usando -isystem
en lugar de -I
. Esto los convertirá en" encabezados del sistema " y GCC no reportará advertencias para ellos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-19 13:56:47
Para aquellos que usan CMake, puede modificar sus directivas include_directories
para incluir el símbolo SYSTEM
que suprime las advertencias contra tales encabezados.
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-10 10:54:47
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-06 17:16:55
Encontré el truco. Para la biblioteca includes, en lugar de -Idir use -isystem dir en el makefile. GCC luego trata boost, etc. como sistema incluye e ignora cualquier advertencia de ellos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-14 10:39:34
#pragma
son instrucciones para el compilador. puedes establecer algo antes del # include y deshabilitarlo después.
También puede hacerlo en la línea de comandos .
Otra página de GCC específicamente en deshabilitando las advertencias.
Optaría por la opción de usar #pragma dentro del código fuente, y luego proporcionar un sonido razón (como un comentario) de por qué está deshabilitando las advertencias. Esto significaría un razonamiento sobre los archivos de encabezados.
CCG se acerca a esto mediante clasificando los tipos de advertencia. Puede clasificarlos para que sean advertencias o para que se ignoren. Los artículos previamente enlazados le mostrarán qué advertencias se pueden desactivar.
Nota: también puede masajear el código fuente para evitar ciertas advertencias utilizando atributos; sin embargo, esto lo vincula bastante estrechamente con GCC.
Note2: GCC también usa la interfaz pop/push como se usa en el compilador de Microsoft Microsoft Microsoft desactiva las advertencias a través de este interfaz. Le sugiero que investigue esto más a fondo, ya que no sé si es posible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-08 15:00:33
Puede intentar usar encabezados precompilados. Las advertencias no desaparecerán, pero al menos no aparecerán en tu compilación principal.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-08 13:46:05
Si necesita anular explícitamente un encabezado del sistema, entonces está restringido a pragmas. Puede verificar qué incluye que está utilizando a través de make depend
salida.
Ver también push-pop de diagnóstico para gcc >= 4.6
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:48
Estas advertencias deben estar motivadas. Éstos serán causados por errores en el código que utiliza la biblioteca, o por errores en el código de la biblioteca en sí. En el primer caso, arregla tu código. En el segundo caso, deje de usar la biblioteca o si es código FOSS, arréglela.