Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > макрос для debug


Автор: kuvshinka 25.5.2012, 23:21
подскажите пож-та есть ли какая-то секция в pro-файле (типа SOURCES, HEADERS, DEFINES...), отвечающая за тип сборки проекта (debug или release) - хочу только для debug-версии программы определить какой-нибудь макрос, соответственно в release его автоматом не было бы "видно" (не определен)... слышала что вроде бы можно использовать такую конструкцию:
Код

в pro-файле: 
debug {
  DEFINES += MYMACROS
}

cpp:
#ifdef MYMACROS
 qDebug() << "defined MACROS";
#else
 qDebug() << "no MACROS";
#endif

но этот макрос остается определенным и в release-версии...

Автор: rsm 26.5.2012, 18:14
qDebug как раз для этого и предназначен, http://doc.qt.nokia.com/4.7-snapshot/debug.html.

Автор: kuvshinka 26.5.2012, 18:37
rsm: при чем тут вообще qDebug? в примере выше он используется для понимания того, определен ли в данный момент макрос MYMACROS или нет? в таком примере получается, что и при debug, и при release-сборке он всегда определен...вопрос заключается в том, как описать макрос так, чтобы он был определен только при debug-сборке...

Автор: _GRIN_ 26.5.2012, 22:26
kuvshinka, примерно так:
Код

CONFIG(debug) 
{
    DEFINES += MYMACROS
}

подробнее тут: http://qt-project.org/doc/qt-4.8/qmake-function-reference.html#config-config

Автор: kuvshinka 27.5.2012, 17:47
_GRIN_: по-вашему все равно не получается нужного результата - при release-сборке (тип сборки программы меняю через "пункт меню" (слева в креаторе) Настройки - изменить конфигурацию сборки и Build configurtation for Program1) макрос все равно остается определен (срабатывает соответствующий qDebug из моего примера выше...)...

Автор: _GRIN_ 27.5.2012, 22:29
kuvshinka, отредактировал предыдущий пост - убрал лишнюю связку debug | release (она от копипаста из одного из моих прошников осталась =) )
проверь - всё должно работать.
Не забудь при смене варианта сборки выполнить qmake (из креатора: Build -> Run qmake).

Автор: kuvshinka 28.5.2012, 20:14
_GRIN_: может  и должно так работать, но не работает....да и я уже так пробовала (по-моему уже по-всякому пробовала)...непонятно что не так...может так нельзя сделать в принципе?

Автор: _GRIN_ 29.5.2012, 10:26
*.pro file:
Код

TEMPLATE=app
CONFIG(debug, debug | release) {
    DEFINES += MACROS
}
SOURCES += main.cpp


main.cpp:
Код

#include <QDebug>
int main()
{
#ifdef MACROS
    qDebug() << "macros defined";
#else
    qDebug() << "macros undefined";
#endif
    return 0;
}


лог:
Код

Starting /home/grin/1_work/research/qt/test_qmake_config/test_qmake_config...
macros defined 
/home/grin/1_work/research/qt/test_qmake_config/test_qmake_config exited with code 0

Starting /home/grin/1_work/research/qt/test_qmake_config/test_qmake_config...
macros undefined 
/home/grin/1_work/research/qt/test_qmake_config/test_qmake_config exited with code 0


P.S. не забываем удалять makefile от прошлой сборки (в креаторе Build -> Clean All)

Автор: math64 29.5.2012, 13:02
Есть макрос QT_NO_DEBUG - так что свой можно не определять. Но makefile нужно перегенерить, по крайней мере в Linux - там только один Makefile, в Windows - три: Makefile , Makefile.debug и Makefile.release

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)