2010-07-22 11 views
21

W projekcie, nad którym pracuję, używamy pewnych bibliotek zewnętrznych, które niestety produkują denerwujące ostrzeżenia gcc. Staramy się wyczyścić wszystkie kody ostrzeżeń i chcemy włączyć flagę "ostrzeżenia-jako-błędy" (-Werror) w GCC. Czy istnieje sposób, aby te ostrzeżenia wygenerowane przez firmę zewnętrzną, których nie możemy naprawić, zniknęły?Jak wyeliminować zewnętrzne ostrzeżenia lib/stron trzecich w GCC

+0

Jaką wersję gcc? –

+0

Greg - dzięki, zrobi. Sam - g ++ 4.1.2 – Michael

Odpowiedz

14

Przypuszczam, że mówisz o ostrzeżeniach pochodzących z nagłówków bibliotek stron trzecich.

GCC specyficzne rozwiązanie byłoby utworzyć kolejny plik nagłówka otoki, który ma zasadniczo dwie linie:

#pragma GCC system_header 
#include "real_3rd_party_header.h" 

i użyć opakowania zamiast oryginalnego nagłówka 3rd party.

Sprawdź szczegółowość pragmy podając another SO response. Zasadniczo mówi GCC, że to (z rekurencyjnie zawartymi plikami) jest nagłówkiem systemu i nie powinno być generowane żadne ostrzeżenie.

W przeciwnym razie nie wiem, w jaki sposób można wyłączyć ostrzeżenia pochodzące z kodu zewnętrznego. Poza oczywiście brutalną siłą: w systemie kompilacji skonfiguruj pliki, które mają być zbudowane z wyłączonymi ostrzeżeniami.

3

http://www.artima.com/cppsource/codestandards.html

Przykład 1: Plik nagłówka trzeciej. Plik nagłówka biblioteki, którego nie można zmienić: zmiana może zawierać konstrukt, który powoduje, że powoduje (prawdopodobnie łagodne) ostrzeżenia. Następnie owinąć plik z własnym wersją oryginalną właczoną nagłówek i selektywnie wyłącza głośne ostrzeżenia dla tego zakresu tylko, a następnie #include swoje opakowanie przez resztę swojego projektu.

34

Zastosowanie -isystem Przykład:

gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o 

Z -isystem Brak ostrzeżenia o doładowania: D

+3

To znacznie lepsze rozwiązanie niż tworzenie opakowań. –

11

Jeśli używasz CMake, można to osiągnąć przez dodanie SYSTEM do include_directories:

include_directories(SYSTEM "${LIB_DIR}/Include") 
        ^^^^^^ 
+1

Testowałem to pod GCC i działa świetnie, ale nie robi nic pod MSVC. Nie jest to nieoczekiwane, ponieważ MSVC nie ma żadnego sposobu na określenie katalogów nagłówków systemu (tj. Systemu GCC), ale o czym należy pamiętać, jeśli potrzebujesz wsparcia MSVC. – Kevin

+0

Wydaje się, że nie robi nic dla mnie na Xcode/Clang albo. –