2010-12-13 3 views
4

나는 이상한 이유로 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을 수동으로 제거합니다. 이제 두 범위의 정의가 필요한 이유는 무엇입니까? 또한, 나는 어떤 메시지도 보지 않는다, 그들이 있어야하는 곳은 어디인가?

+0

나는 언급하지 않았다 : 나의 플랫폼은 Qt Creator 2.0.1과 Qt 4.7.0을 가진 MS Windows XP이다. – Septagram

답변

2

같은 문제가있었습니다. 이를 해결하기 위해 스코프 대신 CONFIG "함수"를 사용했습니다. 당신의 .PRO 파일의 섹션은 다음과 같습니다 간단한이 "Helloworld"프로젝트에서 그것을 시도하고 모든 것이 잘 작동하는 것 같았다

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

.

+1

감사합니다. 여전히, 나는이 신택스가 조금 외계적이라고 생각한다. – Septagram

1

두 가지 모드를 동시에 만들 수있는 debug_and_release이라는 또 다른 구성 옵션이 있습니다. 이 경우 두 범위가 모두 트리거되는 것은 맞습니다.

초기 qmake 명령에 CONFIG=debug을 추가하십시오. 자동 기본값을 무시하고 디버그 모드로 제한해야합니다.

디버깅 대책으로서 .pro 파일에서 message($$CONFIG)을 통해 CONFIG의 전체 내용을 출력 해 볼 수도 있습니다. makefile이 컴파일 될 때가 아니라 qmake가 실행될 때 메시지가 인쇄됩니다.

+0

감사합니다. 이제 메시지가 표시됩니다. CONFIG = debug로 실행하면 적절한 스코프가 실행되지만 QtCore/qglobal.h와 같이 누락 된 헤더가 많이 있습니다. . 나는 또한 CONFIG- = release를 시도했으나 아무 것도하지 않았다. ( – Septagram

+0

"CONFIG - = debug_and_release"시도 – Dashogun