web-dev-qa-db-ja.com

選択したバージョンのQtを.proファイルで確認するにはどうすればよいですか?

Qtの複数のバージョンがインストールされており、すべてのバージョンでプロジェクトをコンパイルする必要があります。
プロファイルを使用して、条件付きコンパイルを行う方法をドキュメントで見つけることができませんでした。

理想的には、これは私がやりたいことです:

QT_VERSION = 5   # this can be 4, set manually

if(QT_VERSION == 5) {
   QT += widgets
}
if(QT_VERSION == 4) {
   QT += gui
}

もちろん、if()コマンドはproファイルには存在しません。
同じことをするより良い方法はありますか?

22
Pietro

ここでは条件関数とスコープを使用できます。

_QT_VERSION = 5   # this can be 4, set manually

equals(QT_VERSION, 5){
   QT += widgets
}
equals(QT_VERSION, 4) {
   QT += gui
}
_

ただし、元のコードで注意する必要があることがいくつかあります。

  1. Qtバージョンを明示的に定義する必要はありません。proファイルで変更するのを忘れた場合、頭痛の種になる可能性があります。代わりに、qmakeは変数_QT_MAJOR_VERSION_を自動的に定義します。

  2. この場合、equalsを使用できます。ただし、以下に示すように、equalsは文字列比較を実行します。ただし、greaterThanlessThanを使用することをお勧めします。これは、Qt 6でコンパイルしようとすると(将来のどこかで)コードが自動的に停止するためです。

  3. guiQTに追加することは、デフォルトで含まれているため必要ありません。

したがって、コードは次のようになります。

_greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets
}
_

ここにいくつかの ドキュメント化されていないqmake gems があります:

  • _defined(func, type)
    _

    funcが定義されている場合はtrueを返します。 typeは、testまたはreplaceと一致させるために、defineTestまたはdefineReplaceのいずれかでなければなりません。

  • _equals(var1, var)
    _

    isEqualとしても機能します)。
    var1がvar2と等しい場合にtrueを返します(文字列比較)。

  • _lessThan(var1, var2)`
    _

    _var1_が_var2_より小さい場合(整数として)、trueを返します。

  • _greaterThan(var1, var2)
    _

    _var1_が_var2_(整数として)より大きい場合、trueを返します。

  • _inFile(file, var, val)
    _

    変数varが指定されたファイルで定義されている場合、trueを返します。さらに、要求された値があるかどうかをテストして確認できます。

  • _load(string)
    _

    include()と_CONFIG += [feature]_の間にある何か。 load(foo)は、標準機能パスで「foo.prf」というファイルを探し、その内容をすぐに実行します。 CONFIGに含まれる機能は、「。pro」ファイルの処理が終了した後に最後に実行されます。 include()と同様に、ファイルが見つかった場合はtrueを返します。

25
Nemanja Boric

(Qt5私が推測する)とき versionAtLeastversionAtMost テスト関数があるので、よくわかりません。

使用例:

!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")

追伸:この回答を投稿すると、「qmake check Qt version」という単純なグーグル検索ではこれらの参照が表示されません(ただし、この投稿では表示されます)。

7
Youw

次のように1行でチェックできます。

equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) {
   QT += bluetooth
} else {
  message(Qt $$QT_VERSION Bluetooth not supported.)
}

!lessThanより大きいか等しいという意味です。

5
ephemerr

これは簡単なテストです。これは QtSerialPort で行っていることであり、Qtフレームワーク内の他のいくつかのモジュールでもあります。

lessThan(QT_MAJOR_VERSION, 5) {
...
} else {
...
}

同様の一般的な条件は次のとおりです。

contains(QT_MAJOR_VERSION, 5): ...

または:

greaterThan(QT_MAJOR_VERSION, 4): ...

ここ ここで行っている別のQtSerialPortの例を見つけることができます。

3
lpapp