私の問題を説明するために空のQtプロジェクトを作成しました。 in proファイルのこのQMakeコードを除いて、プロジェクトには何もありません。プロジェクト/ビルドの設定は単にデフォルトです。QMake DEFINEに条件を守らずに追加する
このQmakeコードは常に$$system()
関数を実行しますが、それは「裏口」です。 contains(DEFINES, anything)
が常に真であると評価され、後続のコードが実行されるいくつかの謎のプロセスがあります。文字通り、私がsomething
とanything
を使用したところで任意の値を使用できます。
CONFIG(something){ DEFINES+=anything }
contains(DEFINES, anything){
message(anything!)
stdOut=$$system(echo x > test.txt)
}
else{
message(nothing!)
}
これが実行されるたびに(私はちょうどところで、それをキックオフするQtCreatorでファイルを保存しています - qmakeのを実行していない)、この一般的なメッセージが表示されます:
プロジェクトMESSAGE:何を!
秒後に、test.txtファイルがプロジェクトディレクトリに表示されます。
ファイルの書き込みを制御する条件としてCONFIG()
を直接使用すると、奇妙なことに加えて、これは起こりません。さらに、そのCONFIG()
行を削除すると、これは起こりません。
これを評価する不思議なバックグラウンドプロセスがあり、常にDEFINES+=anything
を実行してから、ロジックが何であれ処理を続けます。
ソースファイルをプロジェクトに条件付きで追加すると、ファイルがコンパイルされていなくても、常にファイルブラウジングツリーに表示されます。これは、Qt Creatorが条件文を無視し、それ自身の目的のためにQMakeを実行する例です。これは演劇で同じメカニズムですか?