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
Odpowiedz
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.
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.
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
To znacznie lepsze rozwiązanie niż tworzenie opakowań. –
Jeśli używasz CMake, można to osiągnąć przez dodanie SYSTEM
do include_directories
:
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
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
Wydaje się, że nie robi nic dla mnie na Xcode/Clang albo. –
Jaką wersję gcc? –
Greg - dzięki, zrobi. Sam - g ++ 4.1.2 – Michael