2012-07-30 22 views
17

Come posso rilevare dall'interno di un QObject in fase di esecuzione se il Qt a cui è collegato è una build di debug o una build di rilascio?Rileva se qt sta eseguendo una build di debug in fase di esecuzione

Conosco lo QT_NO_DEBUG macro, ma è stato risolto in fase di compilazione per Qt.

Esempio 1 di quando ciò sarebbe utile: Ho un plugin che funge da gestore di crash, fornendo un backtrace. Voglio solo che questo plugin tenti di fare tutto questo se i simboli di debug qt sono disponibili.

Esempio 2: Ho un parser argomento riga di comando scritto in pyqt. Vuole stampare la guida del programma. Come fa a sapere se QApplication supporterà l'opzione -sync o no da pyqt. Se avessi informazioni sul tipo di build, potrei aggiungere o rimuovere -sync facilmente dall'elenco di argomenti che il programma comprende.

+0

Volete sapere se le librerie Qt sono debug o release o volete sapere se la vostra applicazione è compilata in debug o release? –

+0

La libreria Qt. –

risposta

30

Se si desidera solo per verificare se si esegue un debug o rilascio build di dell'applicazione, utilizzare QT_DEBUG:

#ifdef QT_DEBUG 
    qDebug() << "Running a debug build"; 
#else 
    qDebug() << "Running a release build"; 
#endif 

Anche se questo utilizza ovviamente il pre-processore, piuttosto che il controllo in fase di esecuzione. Sono un po 'confuso sul motivo per cui hai specificato che vuoi fare questo controllo in fase di esecuzione, visto che la decisione di costruire con o senza capacità di debug può essere fatta solo prima della compilazione ...

I' Non sono a conoscenza di alcun modo semplice in Qt4 per verificare se la libreria Qt a cui stai collegando è stata compilata con il debug abilitato (anche se ho notato che questo sembra cambiare in Qt5 con l'aggiunta di QLibraryInfo::isDebugBuild()).

+0

Aggiunto chiarimento alla domanda. –

+2

Accettare la risposta, non per i macro, ma per il boccaglio QLibraryInfo. Sembra che molte delle domande che ho posto siano risolte con Qt5, incluso questo. Accetterò che non esiste una soluzione adeguata per Qt4. –