QMake: как работают области? - PullRequest
4 голосов
/ 13 декабря 2010

По какой-то странной причине я не могу заставить работать области в 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 ]

2 голосов
/ 13 декабря 2010

У меня была такая же проблема. Чтобы решить эту проблему, я использовал «функцию» 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", и все, казалось, работало нормально.

1 голос
/ 13 декабря 2010

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

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

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

...