2009-04-22 19 views
6

Ich bin an einem Software-Projekt beteiligt, das in Qt geschrieben wurde und mit qmake und gcc unter Linux erstellt wurde. Wir müssen auf eine Bibliothek von Drittanbietern verweisen, die von relativ geringer Qualität ist und jede Menge Warnungen ausgibt. Ich würde gerne -Wall auf unseren Quellcode verwenden, aber -w an die fiese Third-Party-Bibliothek übergeben, um die Konsole frei von Rauschen und Unordnung zu halten, damit wir uns auf unsere Codequalität konzentrieren können.Bedingte Warnungen mit qmake/gcc deaktivieren?

Gibt es in qmake eine Möglichkeit, bestimmte Dateien und Bibliotheken CFLAGS/CXXFLAGS bedingt hinzuzufügen?

Antwort

5

Jonathan, ich denke, das Problem ist, wo Ihre Quelldateien Header-Dateien aus 3rd-Party-Bibliotheken enthalten, und Sie möchten die Warnungen für letztere ausschalten.

Kevin, ich glaube, Sie pragmas Warnungen steuern können: gcc diagnostic pragmas

Sie diese vor und nach irgendwelchen #includes für 3rd-Party-Libs hinzufügen könnte.

+0

Richtig, die Warnungen stammen von den Headers von Drittanbietern. Ich werde in Pragmas schauen, aber gibt es eine Möglichkeit, die ich nur in die Header von Drittanbietern einfügen kann, oder muss ich ihre Header bearbeiten? –

+0

Sie könnten Header Wrapper für die Header der dritten Partei einführen. Ein Brute-Force-Ansatz wäre es, jedes Include für einen Header eines Drittanbieters in einen einzigen Header einzufügen, dann fügt Ihre App diesen Header einfach hinzu, wenn dies erforderlich ist. Z.B. Wenn Ihre App Bibliothekszed verwendet, erstellen Sie einen zed.h-Header, der alle Zed-Header enthält. Dann können Sie die Pragmen zu zed.h hinzufügen. Oder gehen Sie einfach durch Ihren Code und umschließen Sie jedes #include mit Pragmas. –

0

Normalerweise würden Sie die Bibliothek des Drittanbieters in einem separaten Verzeichnis aus Ihrem eigenen Code erstellen, so dass Sie ein anderes Makefile dafür hätten, also könnten Sie einen anderen Satz von Flags für diese Kompilierung verwenden.

Wenn Sie den Code der Drittanbieter-Bibliothek mit Ihrem eigenen Code gemischt haben, haben Sie sich für einen Wartungs-Albtraum entschieden.

0

Kevin,

qmake CONFIG+=debug QMAKE_CXXFLAGS_WARN_ON=-w QMAKE_CFLAGS_WARN_ON=-w 

sollte (Verwendung CONFIG + = Freigabe, wenn Sie wünschen ...) tun

3

Was passiert, wenn Sie Ihre Bibliothek enthalten -isystem verwenden.

In der Projektdatei z.B .:

QMAKE_CXXFLAGS += -isystem /usr/local/boost_1_44_0 
0

Als Martin schrieb das über

include Hinzufügen
QMAKE_CXXFLAGS += -isystem ... 

unterdrückt Warnungen nur in den jeweiligen Header. Keine Notwendigkeit, Warnungen für Quelldateien Ihres Projekts (oder sogar projektweit) zu deaktivieren oder mit #pragmas oder Wrappers Dateien zu verwirren.

Beachten Sie, dass wenn Sie QtCreator verwenden, Sie immer noch (d. H. Zusätzlich) das Verzeichnis zu INCLUDEPATH hinzufügen möchten, damit der Indexer die Header aufnimmt.

Verwandte Themen