23

リンクされているQtがデバッグビルドまたはリリースビルドであるかどうかを実行時にQObject内から検出するにはどうすればよいですか?

QT_NO_DEBUG マクロについては知っていますが、Qt のビルド時に解決されます。

これが役立つ場合の例 1: バックトレースを提供するクラッシュ ハンドラーとして機能するプラグインがあります。qt デバッグ シンボルが利用可能な場合にのみ、このプラグインがこのすべての作業を実行しようとするようにします。

例 2: pyqt で記述されたコマンド ライン引数パーサーがあります。プログラムのヘルプを印刷したいと考えています。QApplicationがpyqt内から-syncスイッチをサポートするかどうかをどのように確認しますか。ビルド タイプに関する情報があれば、プログラムが理解できる引数のリストから -sync を簡単に追加または削除できます。

4

2 に答える 2

48

アプリケーションのデバッグ ビルドまたはリリース ビルドを実行しているかどうかをテストするだけの場合は、次を使用しますQT_DEBUG

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

これは明らかに実行時にチェックするのではなく、プリプロセッサを使用します。デバッグ機能を使用してビルドするかどうかの決定はコンパイル前にのみ行うことができるため、実行時にこのチェックを行うように指定した理由について少し混乱しています...

Qt4 で、リンクしている Qt ライブラリがデバッグを有効にしてビルドされているかどうかを確認する簡単な方法を知りません (ただし、これは Qt5 で追加されて変更されているように見えますQLibraryInfo::isDebugBuild())。

于 2012-07-30T14:44:05.730 に答える