我在整个代码中使用了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消息。
我在这里缺少什么以及如何解决它?
答案 0 :(得分:3)
将您的代码移至testone.cpp
和testtwo.cpp
的顶部,您应该很高兴。
您可以在编译应用时使用QT_NO_DEBUG_OUTPUT
和QT_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时起作用,而不是你的应用程序(据我所知)。
唯一的选择是更改代码,有几个选项:
定义您可以启用或禁用的自己的调试宏:
// 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
。不幸的是,所有这些都需要更改代码。