2008-10-05 29 views
13

Niedawno dodałem -pedantyczne i -proporcjonalne błędy do moich opcji kompilacji gcc make, aby pomóc w oczyszczeniu mojego kodu platformy. Wszystko było w porządku, dopóki nie znajdzie błędów w zewnętrznych plikach nagłówkowych. Czy istnieje sposób, aby wyłączyć sprawdzanie błędów w zewnętrznym nagłówku plików IE:Jak zignorować pedantyczne błędy kompilatora gcc w zewnętrznych nagłówkach bibliotek?

zaglądać do plików znajdujących się w ten sposób:

#include "myheader.h" 

Zatrzymaj sprawdzanie zawierać pliki tak:

#include <externalheader.h> 

Oto błędy, które dostaję:

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 

Odpowiedz

-3

Możesz naprawić nagłówki i przesłać poprawkę do ffmpeg; kompatybilność z -pedantic jest godnym celem, więc jestem pewna, że ​​go rozważą, szczególnie jeśli będzie to wymagało usuwania końcowych przecinków i tym podobnych.

+10

To nie odpowiada na pytanie. – Nick

+1

@KPEXEA: należy rozważyć ponowne przypisanie akceptacji do oczywistej lepszej odpowiedzi - pomagając w wynikach wyszukiwania SO i czytelnikom ludzkim dostrzec odpowiedź. – sehe

0

Jedna myśl, która przychodzi mi na myśl (nie wiedzieć, czy jest za „out of the box” parametr do tego):

Przygotuj skrypt, który odbędzie wyjście kompilator, a usunąć wszystkie wiersze, które zawierają nagłówki, które nie są w określonej listy (nagłówki).

Nie powinno być tak ciężko robić to w ten sposób.

29

Użycie opcji -Wsystem-headers z gcc spowoduje wyświetlenie komunikatów ostrzegawczych związanych z nagłówkami systemu, które zwykle są pomijane. Jednak chcesz, aby gcc traktował te pliki jako nagłówki systemowe, więc możesz spróbować przekazać "-isystem/usr/local/ffmpeg" (lub gdziekolwiek zainstalować ten pakiet), aby gcc ignorował błędy z plików zawartych w również te katalogi.

+0

świetnie! Ta odpowiedź powinna zostać przyjęta! –

1

Nie wiem w żaden sposób, aby powiedzieć gcc, aby przestał emitować te ostrzeżenia. Możesz jednak hakowo usunąć ostrzeżenia stron trzecich za pomocą czegoś podobnego do llvm-gcc (lub po prostu gcc) -pedantic 2> & 1 | grep -v "/ usr /"

-2

Nie możesz powiedzieć, że GCC jest pedantyczny nagłówki, a nie inne w tym momencie. Możesz zasugerować to jako funkcję, chociaż podejrzewam, że zostanie odrzucona, ponieważ wszyscy byliby pedantyczni.

Możesz samodzielnie naprawić nagłówki, wygenerować poprawkę, a następnie zastosować ją do późniejszych wersji nagłówków, jeśli zaktualizujesz bibliotekę.

Prześlij także poprawkę do ffmpeg w nadziei, że ją przyjmą, ale tak czy inaczej jesteś objęty, nawet jeśli go nie akceptują.

+0

Nagłówki ffmpeg są poprawne z opcją -pedantic -std = c99, której używa do budowania. Ale domyślam się, że nagłówki publiczne powinny być poprawne, niezależnie od tego, co z zewnątrz- "C" jest zbyt ... –