2013-05-24 13 views

Antwort

-1

Es gibt keine Option, es zu steuern, also verbieten Sie diese Warnung in Ihrem Code.

2

Es gibt keine -W Option für "#pragma einmal in der Hauptdatei", so dass Sie es nicht mit den üblichen Mitteln ausschalten können. (Allerdings sind die Clang Entwickler sehr bewusst, dass Warnungen ohne -W Optionen saugen, und es gibt eine allgemeine Regel, dass neue Warnungen immer-W Optionen. Den alten Code Aufräumen, leider wird für frustrierte als Übung . Benutzer)

Wenn Sie keine Shell hackery dagegen haben, könnten Sie so etwas wie dies immer tun:

# This gives the warning... 
clang -c myheader.h 

# ...This doesn't. 
echo '#include "myheader.h"' | clang -c -x c++-header -o myheader.h.gch - 

Die Hinter -, wie üblich, bedeutet "von stdin lesen". Die -x c++ sagt Clang, welche Sprache Sie verwenden (da es nicht von der Dateierweiterung gibt, wenn keine Datei ist), und die Änderung c++ zu c++-header bedeutet, dass wir eine .GCH-Datei anstelle einer .o Datei.

Die zwei so erzeugten Dateien .gch sind NICHT bit-for-bit identisch. Ich weiß nicht genug über gch-Dateien, um Ihnen zu sagen, was an ihrem Verhalten erkennbar anders sein könnte. Da dir aber nur Clangs AST wichtig ist, wette ich, dass es dir gut gehen wird. :)

4

Ich hatte diese Sache, wenn ich versehentlich eine Header-Datei in Kompilierquellen eingefügt (dieser Header hat #pragma einmal Zeile). Um diesen Fehler zu beheben, entfernen Sie den Header aus den Kompilierquellen (und wahrscheinlich müssen Sie ihn durch die .cpp-Datei ersetzen)

+1

Das war das Problem, das ich hatte, weil ich $^in meinem Makefile als Abkürzung verwendet habe. – VaelynPhi

3

Verwenden Sie das Befehlszeilenargument -Wno-pragma-once-outside-header.

+0

Warnung: unbekannte Warnung Option '-Wno-Pragma-einmal-außerhalb-Header' – Sergey

+0

Dank @Sergey, das funktionierte für mich zu der Zeit. – W1M0R

3

Verwenden Sie die -w (Kleinbuchstabe w nicht Großschreibung W) Option beim Kompilieren der Quelle, um solche Warnungen zu unterdrücken.

+0

Ich kann bestätigen, dass dies für gcc 5.4 funktioniert – Julian