Qtの複数のバージョンがインストールされており、すべてのバージョンでプロジェクトをコンパイルする必要があります。
プロファイルを使用して、条件付きコンパイルを行う方法をドキュメントで見つけることができませんでした。
理想的には、これは私がやりたいことです:
QT_VERSION = 5 # this can be 4, set manually
if(QT_VERSION == 5) {
QT += widgets
}
if(QT_VERSION == 4) {
QT += gui
}
もちろん、if()コマンドはproファイルには存在しません。
同じことをするより良い方法はありますか?
ここでは条件関数とスコープを使用できます。
_QT_VERSION = 5 # this can be 4, set manually
equals(QT_VERSION, 5){
QT += widgets
}
equals(QT_VERSION, 4) {
QT += gui
}
_
ただし、元のコードで注意する必要があることがいくつかあります。
Qtバージョンを明示的に定義する必要はありません。proファイルで変更するのを忘れた場合、頭痛の種になる可能性があります。代わりに、qmakeは変数_QT_MAJOR_VERSION
_を自動的に定義します。
この場合、equals
を使用できます。ただし、以下に示すように、equals
は文字列比較を実行します。ただし、greaterThan
とlessThan
を使用することをお勧めします。これは、Qt 6でコンパイルしようとすると(将来のどこかで)コードが自動的に停止するためです。
gui
をQT
に追加することは、デフォルトで含まれているため必要ありません。
したがって、コードは次のようになります。
_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を返します。
(Qt5私が推測する)とき versionAtLeast と versionAtMost テスト関数があるので、よくわかりません。
使用例:
!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")
追伸:この回答を投稿すると、「qmake check Qt version」という単純なグーグル検索ではこれらの参照が表示されません(ただし、この投稿では表示されます)。
次のように1行でチェックできます。
equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) {
QT += bluetooth
} else {
message(Qt $$QT_VERSION Bluetooth not supported.)
}
!lessThan
より大きいか等しいという意味です。
これは簡単なテストです。これは QtSerialPort で行っていることであり、Qtフレームワーク内の他のいくつかのモジュールでもあります。
lessThan(QT_MAJOR_VERSION, 5) {
...
} else {
...
}
同様の一般的な条件は次のとおりです。
contains(QT_MAJOR_VERSION, 5): ...
または:
greaterThan(QT_MAJOR_VERSION, 4): ...
ここ ここで行っている別のQtSerialPortの例を見つけることができます。