26

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

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

QT_VERSION = 5   # this can be 4, set manually

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

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

4

4 に答える 4

30

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

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、文字列比較を実行します。ただし、(将来どこかで) Qt 6 でコンパイルしようとすると、コードが自動的に動作を停止するため、greaterThanandを使用することをお勧めします。lessThan

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

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

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets
}

ここに文書化されていないqmake宝石がいくつかあります:

  • defined(func, type)
    

    funcが定義されている場合は true を返します。またはと一致させるには、タイプを または のいずれtestかにする必要があります。replacedefineTestdefineReplace

  • equals(var1, var)
    

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

  • lessThan(var1, var2)`
    

    が(整数として)var1より小さい場合に true を返します。var2

  • greaterThan(var1, var2)
    

    が(整数として)var1より大きい場合に true を返します。var2

  • inFile(file, var, val)
    

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

  • load(string)
    

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

于 2013-09-06T17:34:41.500 に答える
10

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

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

!lessThanthere は、greater or equal を表します。

于 2018-05-28T09:33:47.993 に答える
9

いつからか (Qt5 だと思います)、versionAtLeastおよびversionAtMostテスト関数があるかどうかはわかりません。

使用例:

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

PS:単純なグーグル「qmake check Qt version」ではこれらの参照が表示されないため、この回答を投稿します(ただし、この投稿は表示されます)。

于 2018-10-07T13:54:41.193 に答える