7

問題: CONFIG(debug,debug|release) および CONFIG(release,deubg|release) は、Qt Creator 2.8.1 for Linux で debug または release が選択されると常に評価されます。

Qt Creator アプリケーションでの私の構成 (ストック - 新しいプロジェクトのデフォルト):

Projects->Build Settings->Debug Build Steps:
  qmake build configuration: Debug
  Effective qmake call: qmake2 proj.pro -r -spec linux-gnueabi-oe-g++ CONFIG+=debug

Projects->Build Settings->Release Build Steps:
  qmake build configuration: Release
  Effective qmake call: qmake2 proj.pro -r -spec linux-gnueabi-oe-g++

proj.pro での私の構成:

message(Variable CONFIG:)
message($$CONFIG)
CONFIG(debug,debug|release)
{
    message(Debug build)
}
CONFIG(release,debug|release)
{
    message(Release build)
}

デバッグ用のコンソール出力:

Project MESSAGE: Variable CONFIG:
Project MESSAGE: lex yacc warn_on debug uic resources warn_on release incremental link_prl no_mocdepend release stl qt_no_framework debug console
Project MESSAGE: Debug build
Project MESSAGE: Release build

リリースのコンソール出力:

Project MESSAGE: Variable CONFIG:
Project MESSAGE: lex yacc warn_on uic resources warn_on release incremental link_prl no_mocdepend release stl qt_no_framework console
Project MESSAGE: Debug build
Project MESSAGE: Release build

Windows 7 では、このような .pro 構成で問題は発生せず、問題なく動作しました。私は絶望的で、.pro ファイルを変更しました。

CONFIG = test
message(Variable CONFIG:)
message($$CONFIG)
CONFIG(debug,debug|release)
{
    message(Debug build)
}
CONFIG(release,debug|release)
{
    message(Release build)
}

そして私は出力に驚いた:

Project MESSAGE: Variable CONFIG:
Project MESSAGE: test
Project MESSAGE: Debug build
Project MESSAGE: Release build

そのため、CONFIG変数を完全に消去しても、デバッグとリリースの構成が表示されます。

私は何を間違っていますか?

4

1 に答える 1

21

Qmakeは正気ではありません。それが唯一の実行可能な説明です。構成に複数回含まれているリリース/デバッグ全体は、手遅れになる前に解決されなかった古い設計バグのようなにおいがし、あまりにも多くの構成が既に書き込まれています。make のタブを覚えていますか? Dude には 15 人ほどのユーザーがいたので、悪い決定を修正することはありませんでした。

ともかく。

Linux の Qt 4.8.4.1 でも同じ問題が発生します。

解決策は次のとおりです。中かっこの前の改行を削除します。

文字通り、これは機能します:

CONFIG(release, debug|release) {
    message(Release)
}

CONFIG(debug, debug|release) {
    message(Debug)
} 

これはしませんが:

CONFIG(release, debug|release) 
{
    message(Release)
}

CONFIG(debug, debug|release) 
{
    message(Debug)
} 

これは、qmake のいくつかのバージョンの解析バグであり、おそらく Linux 側のみであると思われます。

于 2013-12-06T23:33:40.570 に答える