Отключить вывод 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
Поэтому, устанавливая макросы подобным образом, я ожидал получить вывод qDebug только в testtwo.cpp, но я вижу сообщения qDebug от обоих модулей перевода.
Что мне здесь не хватает и как это решить?
3 ответа
Переместите свой код в начало testone.cpp
а также testtwo.cpp
и тебе должно быть хорошо идти.
Ты можешь использовать QT_NO_DEBUG_OUTPUT
а также QT_NO_WARNING_OUTPUT
когда вы компилируете свое приложение, но они должны быть установлены до включения заголовков Qt.
Используя cmake, вы можете добавить эти определения для каждого файла, но я не вижу простого способа сделать это с помощью qmake.
Поскольку это макрос QMake, я не думаю, что вы можете сделать это локально. единственный способ - использовать стандартный макрос как -D TEST
и после сделай что-то подобное.
#ifndef TEST
qDebug() << "test";
#endif
Как отметил Габриэль де Гримуар, 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
везде в вашем коде.
- Преимущество этого в том, что у вас нет
- Используйте категории ведения журнала в Qt (рекомендуется)
К сожалению, все это потребует изменения кода.