Warnungen mit QMake/GCC bedingt deaktivieren?
-
13-09-2019 - |
Frage
Ich bin an einem in QT geschriebenen Softwareprojekt beteiligt und mit QMake und GCC unter Linux erstellt. Wir müssen zu einer Bibliothek von Drittanbietern verlinken, die von ziemlich geringer Qualität und Tonnen von Warnungen ausdrückt. Ich würde gerne -wall in unserem Quellcode verwenden, aber übergeben -w an die böse Bibliothek von Drittanbietern, um die Konsole frei von Lärm und Unordnung zu halten, damit wir uns auf unsere Codequalität konzentrieren können.
Gibt es in QMake eine Möglichkeit, bestimmte Dateien und Bibliotheken konditionell CFLAGs/CXXFLAGs hinzuzufügen?
Lösung
Jonathan, ich denke, das Problem ist, dass Ihre Quelldateien Header -Dateien aus Bibliotheken der Drittanbieter enthalten, und Sie möchten die Warnungen für letztere ausschalten.
Kevin, ich denke, Sie können Pragmas verwenden, um Warnungen zu kontrollieren: GCC -diagnostische Pragmas
Sie können diese vor und nach #Includes für LIBs von Drittanbietern hinzufügen.
Andere Tipps
Was ist, wenn Sie Ihre Bibliothek mit -isystem einbeziehen?
In der Projektdatei zB:
QMAKE_CXXFLAGS += -isystem /usr/local/boost_1_44_0
Kevin,
qmake CONFIG+=debug QMAKE_CXXFLAGS_WARN_ON=-w QMAKE_CFLAGS_WARN_ON=-w
Sollte dies tun (verwenden Sie config+= Release, wenn Sie möchten ...)
Normalerweise würden Sie die Bibliothek von Drittanbietern in einem separaten Verzeichnis aus Ihrem eigenen Code erstellen, sodass Sie ein anderes Makefile dafür haben, damit Sie eine andere Reihe von Flags für diese Zusammenstellung einstellen können.
Wenn Sie den Bibliothekscode von Drittanbietern mit Ihrem eigenen Code gemischt haben, haben Sie sich für einen Wartungsalptraum eingerichtet.
Wie Martin schrieb, das Verzeichnis include -Verzeichnis hinzufügte
QMAKE_CXXFLAGS += -isystem ...
unterdrückt Warnungen nur in den jeweiligen Headern. Es ist nicht erforderlich, Warnungen für Quelldateien Ihres Projekts (oder sogar projektweit) zu deaktivieren oder mit #Pagmas- oder Wrappers-Dateien zu spielen.
Beachten Sie, dass Sie (dh zusätzlich) das Verzeichnis hinzufügen möchten, wenn Sie QTCreator verwenden, zu dem Verzeichnis hinzufügen möchten INCLUDEPATH
Also nimmt der Indexer die Header auf.