2017-10-26 1 views
0

Es gibt zwei Möglichkeiten, Warnungen für externe Bibliotheken zu ignorieren, soweit ich das beurteilen kann.C++ - Compiler-Flag zum Ignorieren von Warnungen für externe Bibliotheken, aber ohne Verzeichnis

erster Weg ist #pragma zu verwenden:

#pragma gcc diagnostic ignored "-Wunused-parameter" 

zweiter Weg ist -isystem/path/to/system/lib zu dem Compiler-Flags hinzuzufügen. Dadurch wird der Pfad als externer Include-Pfad gekennzeichnet, sodass der Compiler keine Warnungen aus diesen Includes ausgibt.

Ich habe ein großes Projekt mit vielen Kompilierungszielen, von denen einige spezielle Bibliotheken von Drittanbietern verwenden, die Probleme für meinen Compiler verursachen. Aus Gründen kann ich die Option #pragma nicht verwenden.

Aber wenn ich die -isystem als eine umfassende Compiler-Flag für alle Build-Ziele verwenden, dann werde ich leider /path/to/system/lib für jedes andere Build-Ziel enthalten, auch diejenigen, die diese Systembibliothek nicht verwenden. Dies bedeutet, dass andere Ziele diese externen Bibliotheken durchsuchen werden, was nicht wünschenswert ist.

Gibt es eine Compiler-Option, ähnlich wie -isystem, die in einer Decke Art und Weise hinzugefügt werden können, die nicht fügt den Suchpfad, aber nur schließt Warnungen, wenn der Pfad bereits im Suchpfad enthalten passiert werden?

Antwort

1

Ich habe ein großes Projekt mit vielen Kompilierungszielen, von denen einige spezielle Bibliotheken von Drittanbietern verwenden, die Probleme für meinen Compiler verursachen. Aus Gründen kann ich die Option #pragma nicht verwenden.

Können Sie näher darauf eingehen? Warum ist ein Wrapper-Header mit #pragma GCC diagnostic keine Option? Das heißt, so etwas wie dieses:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
#include </path/to/real/include.h> 
#pragma GCC diagnostic pop 

(. Oder wenn Sie Lust bekommen möchten, verwenden Sie #include_next) Sie dies nur gelten würde, wenn Subsystem Grenzen überschreiten; das Subsystem selbst würde mit -Wunused-parameter kompiliert werden.

Ich sehe nichts in den GCC/libcpp-Quellen, die es erlauben würden, das System-Header-Flag zurückzusetzen, ohne einen neuen System-Header hinzuzufügen. In jedem Fall sieht das für mich so aus, als ob man es innerhalb des Build-Systems vernünftig angehen könnte.

+0

Ich arbeite mit einer bestehenden Codebasis in einer Organisation und muss die Senior-Code-Prüfer, die angeben, dass ich nicht die Pragma-Lösung verwenden können. – Anton

+0

Ich kann etwas fummelige Zauberei machen, um '-isystem' nur für relevante Ziele korrekt zu setzen, aber es wäre eine zeitaufwendigere Lösung, als ein Flag zu haben, das genau das tut, was ich brauche. Ich bin fast fertig mit der frechen CMake Zauberei, also sollte es in Ordnung sein, wenn es nicht so eine Flagge gibt ... – Anton

Verwandte Themen