4

我在整个代码中都使用了 qDebug。现在我想通过翻译单元来限制它的输出,定义一个单独的宏来启用/禁用翻译单元中的 qDebug 输出:

测试.pro:

DEFINES += NO_DEBUG_ONE

testone.cpp:

#ifdef NO_DEBUG_ONE
#define QT_NO_DEBUG_OUTPUT
#endif

测试二.cpp:

#ifdef NO_DEBUG_TWO
#define QT_NO_DEBUG_OUTPUT
#endif

因此,像这样设置宏我希望仅在 testtwo.cpp 中获得 qDebug 输出,但我看到来自两个翻译单元的 qDebug 消息。

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

4

3 回答 3

3

testone.cpp将您的代码移动到and的顶部,testtwo.cpp您应该一切顺利。

您可以在编译应用程序时使用QT_NO_DEBUG_OUTPUTQT_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 中使用 Logging Categories(推荐)

不幸的是,所有这些都需要更改代码。

于 2015-10-19T07:09:34.033 回答