2008-10-05 13 views
13

Hace poco agregué -pedantic -y -pedantic-errors a mi make gcc compile options para ayudar a limpiar mi código multiplataforma. Todo estaba bien hasta que encuentra errores en los archivos de encabezado incluidos externos. ¿Hay una manera de desactivar esta comprobación de errores en la cabecera externa archivos de IE:¿Cómo ignorar los errores pedantes de un compilador gcc en los encabezados de las bibliotecas externas?

seguir buscando archivos incluidos como esto:

#include "myheader.h" 

Detener la comprobación de archivos de inclusión de esta manera:

#include <externalheader.h> 

Estos son los errores que estoy recibiendo:

g++ -Wall -Wextra -Wno-long-long -Wno-unused-parameter -pedantic --pedantic-errors 
-O3 -D_FILE_OFFSET_BITS=64 -DMINGW -I"freetype/include" -I"jpeg" -I"lpng128" -I"zlib" 
-I"mysql/include" -I"ffmpeg/libswscale" -I"ffmpeg/libavformat" -I"ffmpeg/libavcodec" 
-I"ffmpeg/libavutil" -o omingwd/kguimovie.o -c kguimovie.cpp 

In file included from ffmpeg/libavutil/avutil.h:41, 
      from ffmpeg/libavcodec/avcodec.h:30, 
      from kguimovie.cpp:44: 
ffmpeg/libavutil/mathematics.h:32: error: comma at end of enumerator list 
In file included from ffmpeg/libavcodec/avcodec.h:30, 
      from kguimovie.cpp:44: 
ffmpeg/libavutil/avutil.h:110: error: comma at end of enumerator list 
In file included from kguimovie.cpp:44: 
ffmpeg/libavcodec/avcodec.h:277: error: comma at end of enumerator list 
ffmpeg/libavcodec/avcodec.h:303: error: comma at end of enumerator list 
ffmpeg/libavcodec/avcodec.h:334: error: comma at end of enumerator list 
ffmpeg/libavcodec/avcodec.h:345: error: comma at end of enumerator list 
ffmpeg/libavcodec/avcodec.h:2249: warning: `ImgReSampleContext' is deprecated 
(declared at ffmpeg/libavcodec/avcodec.h:2243) 
ffmpeg/libavcodec/avcodec.h:2259: warning: `ImgReSampleContext' is deprecated 
(declared at ffmpeg/libavcodec/avcodec.h:2243) 
In file included from kguimovie.cpp:45: 
ffmpeg/libavformat/avformat.h:262: error: comma at end of enumerator list 
In file included from ffmpeg/libavformat/rtsp.h:26, 
      from ffmpeg/libavformat/avformat.h:465, 
      from kguimovie.cpp:45: 
ffmpeg/libavformat/rtspcodes.h:38: error: comma at end of enumerator list 
In file included from ffmpeg/libavformat/avformat.h:465, 
      from kguimovie.cpp:45: 
ffmpeg/libavformat/rtsp.h:32: error: comma at end of enumerator list 
ffmpeg/libavformat/rtsp.h:69: error: comma at end of enumerator list 

Respuesta

-3

Puede corregir los encabezados y enviar un parche a ffmpeg; la compatibilidad con -pedantic es un objetivo digno, así que estoy seguro de que lo considerarían, especialmente si solo implica eliminar las comas finales y cosas por el estilo.

+10

Esto en realidad no responde la pregunta. – Nick

+1

@KPexEA: considere volver a asignar el aceptar a la mejor respuesta obvia: ayudar a los resultados de búsqueda de SO y a los lectores humanos a detectar la respuesta. – sehe

0

Una idea que me viene a la mente (no saber si hay un 'fuera de la caja' parámetro para esto):

Preparar un guión que se llevará a la salida de su compilador, y eliminar todas las líneas que contienen las cabeceras que no están en una lista específica (sus encabezados)

No debería ser tan difícil hacerlo de esta manera.

29

El uso de la opción -Wsystem-headers con gcc imprimirá los mensajes de advertencia asociados con los encabezados del sistema, que normalmente están suprimidos. Sin embargo, está buscando que gcc básicamente trate estos archivos como encabezados del sistema, por lo que puede intentar pasar "-isystem/usr/local/ffmpeg" (o donde haya instalado ese paquete) para que gcc ignore los errores de los archivos incluidos en estos directorios también.

+0

genial! ¡Esa respuesta debería haber sido aceptada! –

1

No conozco ninguna forma de decirle a gcc que deje de emitir esas advertencias. Sin embargo, podría eliminar maliciosamente advertencias de terceros con algo como llvm-gcc (o solo gcc) -pedantic 2> & 1 | grep -v "/ usr /"

-2

No puede decirle a GCC que sea pedante sobre algunos encabezados y no otros en este momento. Puede sugerirlo como una característica, aunque sospecho que se resistirá, ya que idealmente todos serían pedantes.

Lo que puede hacer es arreglar los encabezados usted mismo, generar un parche y luego aplicar ese parche a versiones posteriores de los encabezados si actualiza la biblioteca.

Envíe el parche a ffmpeg también con la esperanza de que lo adopten, pero en cualquier caso está cubierto incluso si no lo aceptan.

+0

Los encabezados de ffmpeg son válidos con -pedantic -std = c99, que es lo que usa para compilar. Pero creo que los encabezados públicos deberían ser válidos sea lo que sea -extern- "C" también lo es ... –

Cuestiones relacionadas