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-файлов.