2013-02-04 16 views
7

私はQt 5をダウンロードしてプロジェクトを構築しようとしました。プロジェクトは現在、QT変数にウィジェットを追加するために必要な、それは以前のバージョンとの警告生成されていますqmake数値の可変比較

プロジェクトMESSAGE:警告:不明QT:ウィジェットは

簡単な解決策は簡単なチェックを追加しているように見えます:

equals($$QT_MAJOR_VERSION, 5) { 
    message(" ================ QT 5 ================ ") 
    QT += widgets 
} else { 
    message(" ================ QT 4 ================ ") 
} 

これは機能しませんでした(QT 4が印刷されます)。 equalsはqmake function referenceの一部ではありませんが、isは含まれています。試してみたところ:

contains($$QT_MAJOR_VERSION, 5) { 
    message(" ================ QT 5 ================ ") 
    QT += widgets 
} else { 
    message(" ================ QT 4 ================ ") 
} 

でも、どちらもうまくいきませんでした。 contains( "$$ QT_MAJOR_VERSION"、 "5")などの他のさまざまな組み合わせは機能しません。動作しません。この方法で、その値がローカル変数とテストを設定

message($$QT_MAJOR_VERSION) 

:QT_MAJOR_VERSIONは4または5である$$

仮定は、のような行でチェックされます。

これまでの結論は、私がqmakeメカニズムについて何か基本的なことを理解していないということです。では、qmake .proファイルの値と変数をどのように比較していますか?

を使用でき

答えて

10

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
5

Zlatomirが言ったことに加えて、greaterThanは、厳密な比較( "より大きいと同じ" ではない)です。 isEqual(QT_MAJOR_VERSION, 5)を使用して数値の等価性をテストすることもできます。

QT_MAJOR_VERSION,QT_MINOR_VERSIONおよびQT_PATCH_VERSIONには$$を指定しないでください。

3

それは

equals (QT_MAJOR_VERSION, 4) 
{ 
    //some conditional stuff 
} 

が動作しないことが表示されますが、

equals (QT_MAJOR_VERSION, 4) { 
    //some conditional stuff 
} 

作品...それは、開口部のブレースの位置に敏感です! Wierd