Как игнорировать gcc-компилятор педантичных ошибок во внешних заголовках библиотеки?

Недавно я добавил -патентные и -патентные-ошибки в мои параметры компиляции gcc, чтобы помочь очистить мой код кросс-платформы. Все было в порядке, пока не обнаружил ошибки во внешних заголовочных файлах. Есть ли способ отключить эту проверку ошибок во внешних файлах заголовков IE:

Продолжайте проверять файлы, такие как:

#include "myheader.h"

Остановить проверку для включенных файлов следующим образом:

#include <externalheader.h>

Вот ошибки, которые я получаю:

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

Ответы

Ответ 1

Вы можете исправить заголовки и отправить патч в ffmpeg; совместимость с -pedantic является достойной целью, поэтому я уверен, что они ее рассмотрят, особенно если она просто включает удаление запятых и т.д.

Ответ 2

Использование опции -Wsystem-headers с gcc будет печатать предупреждающие сообщения, связанные с заголовками системы, которые обычно подавляются. Тем не менее, вы хотите, чтобы gcc рассматривал эти файлы как системные заголовки, поэтому вы можете попробовать передать "-систему/usr/local/ffmpeg" (или где бы вы ни устанавливали этот пакет), чтобы gcc игнорировал ошибки из файлов, включенных в эти каталоги также.

Ответ 3

Я не знаю, как gcc перестать выдавать эти предупреждения. Однако вы могли бы взломать сторонние предупреждения с помощью чего-то вроде llvm-gcc (или просто gcc) -pedantic 2 > & 1 | grep -v "/usr/"

Ответ 4

Одна идея, которая приходит мне на ум (не знаю, есть ли для этого параметр "из коробки" ):

Подготовьте script, который выведет ваш компилятор и удалит все строки, содержащие заголовки, которые не находятся в определенном списке (ваши заголовки).

Не должно быть так сложно это делать.

Ответ 5

Вы не можете сказать GCC быть педантичным о некоторых заголовках, а не о других в настоящее время. Вы можете предложить его как функцию, хотя я подозреваю, что ей будет сопротивляться, так как в идеале все будут педантичными.

Что вы можете сделать, это исправить заголовки самостоятельно, создать патч, а затем применить этот патч к более поздним версиям заголовков, если вы обновите библиотеку.

Отправьте патч к ffmpeg, а также в надежде, что они его усыновят, но в любом случае вы охвачены, даже если они его не принимают.