使用宏在本地禁用qDebug输出

时间:2015-10-17 06:46:26

标签: c++ qt macros qt5 qdebug

我在整个代码中使用了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消息。

我在这里缺少什么以及如何解决它?

3 个答案:

答案 0 :(得分:3)

将您的代码移至testone.cpptesttwo.cpp的顶部,您应该很高兴。

您可以在编译应用时使用QT_NO_DEBUG_OUTPUTQT_NO_WARNING_OUTPUT,但必须在包含Qt标头之前设置这些应用。

使用cmake你可以在每个文件的基础上添加这些定义但是我没有看到使用qmake这样做的简单方法。

答案 1 :(得分:0)

因为它是一个QMake宏,我认为你不能在本地做到这一点。唯一的方法是使用标准宏作为-D TEST,之后做这样的事情。

#ifndef TEST
    qDebug() << "test";
#endif

答案 2 :(得分: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中的记录类别(推荐)
  4. 不幸的是,所有这些都需要更改代码。