QMake: как работают области?

По какой-то странной причине я не могу заставить работать области в QMake. Вот некоторый код в моем файле проекта:

debug {
    QMAKE_CXXFLAGS_DEBUG += -g3 -O0
    message ("Some debug output")
}

release {
    DEFINES += QT_NO_DEBUG
    DEFINES += QT_NO_DEBUG_OUTPUT
    message ("No debug output")
}

Но когда я скомпилирую его в режиме отладки, вот командная строка gcc, которую я получаю:

g++ -c -g -g3 -O0 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DLIBPROVERIM_LIBRARY -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DWINDOWS -DQT_DLL -DQT_SQL_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\2010.05\qt\include\QtCore" -I"c:\Qt\2010.05\qt\include\QtNetwork" -I"c:\Qt\2010.05\qt\include\QtGui" -I"c:\Qt\2010.05\qt\include\QtXml" -I"c:\Qt\2010.05\qt\include\QtSql" -I"c:\Qt\2010.05\qt\include" -I"c:\Qt\2010.05\qt\include\ActiveQt" -I"debug" -I"..\proverim" -I"." -I"c:\Qt\2010.05\qt\mkspecs\win32-g++" -o debug\PForm.o ..\proverim\PForm.cc

Обратите внимание, что я попытался очистить свой проект, а также вручную удалить make-файлы. Теперь, почему он принимает определения из обеих областей? Кроме того, я не вижу сообщений, где они должны быть?

2 ответа

Решение

У меня такая же проблема. Чтобы решить эту проблему, я использовал "функцию" CONFIG вместо области видимости. Этот раздел вашего.pro файла будет:

CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS_DEBUG += -g3 -O0
message("DEBUG!")
} else {
DEFINES += QT_NO_DEBUG
DEFINES += QT_NO_DEBUG_OUTPUT
message("RELEASE!")
}

Попробовал это в простом проекте "HelloWorld", и все, казалось, работало нормально.

Существует еще одна опция конфигурации, называемая debug_and_release, которая позволяет вам создавать оба режима одновременно. В этом случае, верно, что обе ваши области видимости срабатывают.

Попробуйте добавить CONFIG=debug к вашей начальной команде qmake; он должен отменять любые автоматические настройки по умолчанию и ограничивать вас режимом отладки.

В качестве меры отладки вы также можете попытаться вывести все содержимое CONFIG через message($$CONFIG) в вашем.pro файле. Сообщения печатаются при запуске qmake, а не при компиляции make-файлов.

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