Отключить вывод 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, а не ваше приложение (насколько я понимаю).

Единственный вариант - изменить ваш код, есть несколько вариантов:

  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 (рекомендуется)

К сожалению, все это потребует изменения кода.

Другие вопросы по тегам