Ich habe ein Projekt, das log4cxx-, Boost- usw. Bibliotheken verwendet, deren Header viele (sich wiederholende) Warnungen generieren. Gibt es eine Möglichkeit, Warnungen von Bibliotheks-Includes (dh #include <some-header.h>) oder Includes von bestimmten Pfaden zu unterdrücken? Ich möchte -Wall und / oder -Wextra wie gewohnt für Projektcode verwenden, ohne dass relevante Informationen verdeckt werden. Ich verwende derzeit grep für die Ausgabe, mache aber etwas Besseres.
126
extern "C"
, was zu merkwürdigen Fehlern bei der C-Verknüpfung führt, wenn Sie#include
einen C ++ - Header in einem-isystem
Pfad haben.Wenn Sie CMake verwenden, können Sie Ihre
include_directories
Anweisungen so ändern , dass sie das Symbol enthalten,SYSTEM
das Warnungen vor solchen Headern unterdrückt.quelle
${LIBFOO_USE_FILE}
Variable bereitstellt , die mit dem Befehl include () von CMake verwendet werden soll ?easylogging++
und ich erhalte die gleiche große Menge an Warnungen aus demeasylogging++.h
, obwohl der Ordner, in dem es sich befindet, in derSYSTEM
Option enthalten ist.Sie können Pragmas verwenden. Beispielsweise:
quelle
gcc
cl
hat die Fähigkeit auch seit Jahren ... Manchmalgcc
ist es etwas langsam, sich anzupassen.Ich habe den Trick gefunden. Für Bibliotheks-Includes anstelle der
-Idir
Verwendung-isystem dir
im Makefile. GCC behandelt dann Boost usw. als System und ignoriert alle Warnungen von ihnen.quelle
#pragma
sind Anweisungen an den Compiler. Sie können etwas vor dem #include setzen und es danach deaktivieren.Sie können dies auch über die Befehlszeile tun .
Eine weitere GCC-Seite speziell zum Deaktivieren von Warnungen .
Ich würde mich für die Option entscheiden, # Pragmas im Quellcode zu verwenden und dann einen guten Grund (als Kommentar) anzugeben, warum Sie die Warnungen deaktivieren. Dies würde bedeuten, über die Header-Dateien nachzudenken.
GCC nähert sich dem, indem es die Warnungstypen klassifiziert . Sie können sie als Warnungen klassifizieren oder ignorieren. Die zuvor verlinkten Artikel zeigen Ihnen, welche Warnungen möglicherweise deaktiviert sind.
Hinweis: Sie können den Quellcode auch massieren, um bestimmte Warnungen mithilfe von Attributen zu verhindern . Dies bindet Sie jedoch ziemlich eng an GCC.
Hinweis 2: GCC verwendet auch die Pop / Push-Schnittstelle, wie sie im Microsoft-Compiler verwendet wird. Microsoft deaktiviert Warnungen über diese Schnittstelle. Ich schlage vor, Sie untersuchen dies weiter, da ich nicht weiß, ob es überhaupt möglich ist.
quelle
Sie können versuchen, vorkompilierte Header zu verwenden . Warnungen werden nicht verschwinden, aber zumindest werden sie nicht in Ihrer Hauptzusammenstellung angezeigt.
quelle
-isystem
, aber denken Sie daran, sie sowohl beim Kompilieren des Headers als auch im Code zu verwenden)Wenn Sie einen Systemheader explizit überschreiben müssen, sind Sie auf Pragmas beschränkt. Sie können über die
make depend
Ausgabe überprüfen, welche Includes Sie verwenden .Siehe auch Diagnose-Push-Pop für gcc> = 4.6
quelle
Folgendes setzen
Deaktiviert die GCC-Warnungen für den folgenden Code in dieser Datei.
quelle
Es muss Gründe für diese Warnungen geben. Diese werden entweder durch Fehler in Ihrem Code verursacht, der die Bibliothek verwendet, oder durch Fehler im Bibliothekscode selbst. Korrigieren Sie im ersten Fall Ihren Code. Im zweiten Fall beenden Sie entweder die Verwendung der Bibliothek oder beheben Sie das Problem, wenn es sich um FOSS-Code handelt.
quelle