2013-05-24 21 views

risposta

-1

Non ci sono opzioni per controllarlo, quindi basta mettere questo avviso nel codice.

2

Non esiste l'opzione -W per "#pragma una volta nel file principale", quindi non è possibile disattivarlo tramite i soliti mezzi. (Tuttavia, gli sviluppatori Clang sono molto consapevoli del fatto che gli avvertimenti senza -W opzioni di succhiare, e c'è una regola generale che nuove avvertimenti sempre ottenere -W opzioni. Ripulire il codice vecchio, purtroppo, è lasciato come esercizio per frustrato . utenti)

Se non ti dispiace shell aggiustamenti, si può sempre fare qualcosa di simile:

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

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

Il finale -, come al solito, significa "leggere da stdin". Il -x c++ dice a Clang quale lingua stai usando (dal momento che non può sapere dall'estensione del file quando è senza file) e cambiare c++ a c++-header significa che vogliamo produrre un file .gch invece di un .o file.

I due file .gch così prodotti sono NON bit per bit identici. Non ne so abbastanza sui file gch per dirti cosa potrebbe essere notevolmente diverso dal loro comportamento. Comunque, dato che tutto quello che ti interessa è l'AST di Clang, scommetto che starai bene con quello. :)

4

Ho avuto questa cosa quando ho accidentalmente incluso un file di intestazione in sorgenti compilate (questa intestazione ha #pragma una volta riga). Per correggere questa intestazione rimuovi da fonti di compilazione (e probabilmente è necessario sostituirlo con il file .cpp)

+1

Questo era il problema che avevo perché stavo usando $^nel mio makefile come scorciatoia. Avviso – VaelynPhi

3

Utilizzare l'argomento della riga di comando -Wno-pragma-once-outside-header.

+0

: opzione di avviso sconosciuta '-Wno-pragma-once-outside-header' – Sergey

+0

Grazie a @Sergey, questo ha funzionato per me al momento. – W1M0R

3

Utilizzare l'opzione -w (minuscolo w non maiuscola W) durante la compilazione dell'origine per sopprimere tali avvisi.

+0

Posso confermare che questo funziona per gcc 5.4 – Julian

Problemi correlati