2010-12-13 13 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 

注意だけでなく、メイクファイルを手動で削除する。今、なぜ両方のスコープからの定義が必要ですか?また、メッセージは表示されません。どこにいるのでしょうか?

+0

私のプラットフォームはMS Windows XPで、Qt Creator 2.0.1とQt 4.7.0です。 – 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を追加してみてください。自動的なデフォルトを上書きし、デバッグモードに制限する必要があります。

デバッグの手段として、CONFIGの全内容を.proファイルのmessage($$CONFIG)経由で出力することもできます。 makefileがコンパイルされたときではなく、qmakeが実行されたときにメッセージが出力されます。

+0

ありがとう、今私はメッセージを参照してください。私がCONFIG = debugで実行すると、適切なスコープが実行されますが、QtCore/qglobal.hのようにヘッダが紛失しています。 私もCONFIG- = releaseを試しましたが、何もしませんでした:( – Septagram

+0

"CONFIG - = debug_and_release" – Dashogun

関連する問題