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
Antwort
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.
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.
Verwenden -isystem
Beispiel:
gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o
Mit -isystem NO über Boost-Warnung: D
Dies ist eine viel bessere Lösung als das Erstellen von Wrappern. –
Wenn Sie CMake verwenden, können Sie dies erreichen, indem das Hinzufügen SYSTEM
zu include_directories
:
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
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
Scheint auch nichts für mich auf Xcode/Clang zu tun. –
Welche Version von gcc? –
Greg - danke, werde ich tun. Sam - g ++ 4.1.2 – Michael