2009-04-22 13 views
6

Sono coinvolto in un progetto software scritto in Qt e realizzato con qmake e gcc su Linux. Dobbiamo collegarci a una libreria di terze parti che è di qualità abbastanza bassa e sputa tonnellate di avvertimenti. Vorrei usare -W -Wall sul nostro codice sorgente, ma passare -w alla libreria di terze parti per mantenere la console libera da rumore e confusione, in modo che possiamo concentrarci sulla nostra qualità del codice.Disabilita condizionalmente gli avvisi con qmake/gcc?

In qmake, c'è un modo per aggiungere condizionatamente CFLAGS/CXXFLAGS a determinati file e librerie?

risposta

5

Jonathan, penso che il problema sia dove i file di origine includono i file di intestazione di librerie di terze parti e si desidera disattivare gli avvisi per quest'ultimo.

Kevin, penso che si può utilizzare per controllare pragma avvertimenti: gcc diagnostic pragmas

si potrebbe aggiungere questi prima e dopo ogni # include per il 3 librerie di partito.

+0

Corretto, gli avvisi provengono dalle intestazioni di terze parti. Prenderò in esame i pragma, ma c'è un modo per iniettarli solo nelle intestazioni di terze parti o dovrò modificare le intestazioni? –

+0

È possibile introdurre i wrapper di intestazione per le intestazioni di terze parti. Un approccio a forza bruta consisterebbe nel mettere qualsiasi inclusione per un'intestazione di terze parti in un'unica intestazione, quindi l'app include solo quella intestazione dove necessario. Per esempio. se la tua app utilizza la libreria Zed, quindi crea un'intestazione zed.h che include tutte le intestazioni Zed. Quindi puoi aggiungere i pragmi a zed.h. Oppure basta leggere il codice e circondare ogni #include con la direttiva. –

0

Normalmente, devi creare la libreria di terze parti in una directory separata dal tuo codice, in modo da avere un diverso makefile per questo, in modo da poter inserire un diverso set di flag per quella compilation.

Se il codice della libreria di terze parti è stato mixato con il proprio codice, è stato impostato un incubo di manutenzione.

0

Kevin,

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

dovrebbe fare (uso CONFIG + = rilascio, se lo si desidera ...)

3

Che cosa succede se si include la libreria utilizzando -isystem.

nel file di progetto ad es .:

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

Come Martin ha scritto aggiungendo la directory includere tramite

QMAKE_CXXFLAGS += -isystem ... 

sopprime avvertimenti solo nelle rispettive intestazioni. Non c'è bisogno di disabilitare gli avvertimenti per qualsiasi file sorgente del progetto (o anche per l'intero progetto) o pasticciare con #pragmas o file di wrapper.

Si noti che se si sta utilizzando QtCreator ci si può comunque (vale a dire in aggiunta) desidera aggiungere la directory al INCLUDEPATH così l'indicizzatore raccoglie le intestazioni.

Problemi correlati