4

コード全体でqDebugを使用しました。ここで、翻訳単位で出力を制限し、翻訳単位で qDebug 出力を有効/無効にする別のマクロを定義したいと思います。

test.pro:

DEFINES += NO_DEBUG_ONE

testone.cpp:

#ifdef NO_DEBUG_ONE
#define QT_NO_DEBUG_OUTPUT
#endif

testtwo.cpp:

#ifdef NO_DEBUG_TWO
#define QT_NO_DEBUG_OUTPUT
#endif

したがって、このようなマクロを設定すると、testtwo.cpp でのみ qDebug 出力が得られると予想していましたが、両方の翻訳単位から qDebug メッセージが表示されます。

ここで何が欠けていて、それを解決する方法は?

4

3 に答える 3

3

コードをtestone.cppandの先頭に移動すると、準備完了testtwo.cppです。

QT_NO_DEBUG_OUTPUTアプリをコンパイルするときにandを使用できますQT_NO_WARNING_OUTPUTが、これらは Qt ヘッダーが含まれる前に設定する必要があります。

cmake を使用すると、これらの定義をファイルごとに追加できますが、qmake でそれを行う簡単な方法がわかりません。

于 2015-10-19T07:49:13.980 に答える
0

これは QMake マクロなので、ローカルでは実行できないと思います。唯一の方法は、そのようなことを行った後に標準マクロを使用する-D TESTことです。

#ifndef TEST
    qDebug() << "test";
#endif
于 2015-10-17T08:51:18.550 に答える
0

Gabriel de Grimouard が指摘したように、QT_NO_DEBUG_OUTPUTアプリケーションではなく Qt をコンパイルすると影響を受けます (私が理解している限り)。

唯一のオプションはコードを変更することです。いくつかのオプションがあります。

  1. 彼の答えで提案されているように、各デバッグの前にマクロチェックを利用してください
  2. 有効または無効にできる独自のデバッグ マクロを定義します。

    // Top of testone.cpp
    #ifdef NO_DEBUG_ONE
      #define DEBUG_MESSAGE(message) 
    #else
      #define DEBUG_MESSAGE(message) qDebug() << message
    #endif
    // In your code
    DEBUG_MESSAGE("This is my debug message");
    
    • #ifndef TESTこれの利点は、コードのどこにもないことです。
  3. Qt でロギング カテゴリを利用する (推奨)

残念ながら、これらはすべてコードの変更が必要になります。

于 2015-10-19T07:09:34.033 に答える