QMake:范围如何运作?

时间:2010-12-13 11:08:43

标签: qt 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

请注意,我尝试清理项目,以及手动删除makefile。现在为什么需要两个范围的定义?另外,我没有看到任何消息,它们应该在哪里?

2 个答案:

答案 0 :(得分: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”项目中尝试过,一切似乎都运转良好。

答案 1 :(得分:1)

还有另一个名为debug_and_release的配置选项,允许您同时构建两种模式。在这种情况下,两个范围都被触发是正确的。

尝试将CONFIG=debug添加到您的初始qmake命令中;它应该覆盖任何自动默认值并限制您进入调试模式。

作为调试措施,您还可以尝试通过.pro文件中的message($$CONFIG)输出CONFIG的全部内容。运行qmake时会打印消息,而不是在编译makefile时打印。