2010-07-22 15 views
21

In dem Software-Projekt, an dem ich arbeite, verwenden wir bestimmte 3rd-Party-Bibliotheken, die leider ärgerliche gcc-Warnungen erzeugen. Wir sind bestrebt, den gesamten Code der Warnungen zu bereinigen und das Gleat-Warning-as-errors-Flag (-Werror) in GCC zu aktivieren. Gibt es eine Möglichkeit, diese von Dritten generierten Warnungen, die wir nicht beheben können, verschwinden zu lassen?So beseitigen Sie externe lib/Drittanbieter-Warnungen in GCC

+0

Welche Version von gcc? –

+0

Greg - danke, werde ich tun. Sam - g ++ 4.1.2 – Michael

Antwort

14

Ich nehme an, Sie sprechen über die Warnungen, die von den 3rd Party Library Headern kommen.

Die spezifische Lösung GCC wäre eine weitere Wrapper-Header-Datei, die im Wesentlichen die beiden Linien hat zu erstellen: header

#pragma GCC system_header 
#include "real_3rd_party_header.h" 

Und verwenden Sie den Wrapper anstelle der ursprünglichen 3rd-Party.

Überprüfen Sie another SO response Detaillierung des Pragma. Es teilt GCC im Wesentlichen mit, dass dies (mit rekursiv eingeschlossenen Dateien) ein Systemkopf ist und keine Warnmeldungen generiert werden sollten.

Ansonsten weiß ich nicht, wie man Warnungen aus dem 3rd Party Code deaktivieren kann. Außer natürlich durch die rohe Gewalt: Im Build-System konfigurieren Sie die zu erstellenden Dateien mit Warnungen aus.

3

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

Beispiel 1: Eine Drittanbieter-Header-Datei. Eine Bibliothek Header-Datei, die Sie nicht Änderung könnte ein Konstrukt, dass Ursachen (wahrscheinlich gutartige) Warnungen enthält. wickeln Sie die Datei mit Ihrer eigenen Version, die den ursprünglichen Kopf #include und schaltet selektiv nur die laut Warnungen für diesen Bereich ab, und dann # include Ihre Wrapper für den Rest Ihres Projektes.

34

Verwenden -isystem Beispiel:

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

Mit -isystem NO über Boost-Warnung: D

+3

Dies ist eine viel bessere Lösung als das Erstellen von Wrappern. –

11

Wenn Sie CMake verwenden, können Sie dies erreichen, indem das Hinzufügen SYSTEM zu include_directories:

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

Ich testete dies unter GCC und es funktioniert gut, aber es macht nichts unter MSVC. Nicht unerwartet, da MSVC scheinbar keine Möglichkeit hat, System-Header-Verzeichnisse anzugeben (d. H. GCC-System), aber etwas, das Sie im Auge behalten sollten, wenn Sie MSVC-Unterstützung benötigen. – Kevin

+0

Scheint auch nichts für mich auf Xcode/Clang zu tun. –