ユーザーが使用しているコンパイラのバージョンとベンダーを qmake で取得する方法はありますか? 必要なのは、g++ 3.x が使用されているときにプロジェクトのいくつかのターゲットのビルドを無効にし、g++ 4.x が使用されているときにそれらを有効にすることです。
更新:ほとんどの回答はプリプロセッサを対象としていました。これは避けたいことです。ターゲットを特定のコンパイラ バージョン用にビルドするのではなく、ビルド システムによってこの決定が行われるようにしたいと考えています。
ユーザーが使用しているコンパイラのバージョンとベンダーを qmake で取得する方法はありますか? 必要なのは、g++ 3.x が使用されているときにプロジェクトのいくつかのターゲットのビルドを無効にし、g++ 4.x が使用されているときにそれらを有効にすることです。
更新:ほとんどの回答はプリプロセッサを対象としていました。これは避けたいことです。ターゲットを特定のコンパイラ バージョン用にビルドするのではなく、ビルド システムによってこの決定が行われるようにしたいと考えています。
ashcatchの回答に加えて、コマンドラインにクエリを実行し、応答を変数として返すことがqmake
できます。だからあなたはこのようなことをすることができます:
linux-g++ {
system( g++ --version | grep -e "\<4.[0-9]" ) {
message( "g++ version 4.x found" )
CONFIG += g++4
}
else system( g++ --version | grep -e "\<3.[0-9]" ) {
message( "g++ version 3.x found" )
CONFIG += g++3
}
else {
error( "Unknown system/compiler configuration" )
}
}
その後、それを使用してターゲットを指定する場合は、構成スコープルールを使用できます。
SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5
Caleb Huitt - cjhuittに基づく私の答え。しかし、彼のアプローチは私にはうまくいきません。
*-g++ {
GCC_VERSION = $$system("g++ -dumpversion")
contains(GCC_VERSION, 6.[0-9]) {
message( "g++ version 6.x found" )
CONFIG += g++6
} else {
contains(GCC_VERSION, 5.[0-9]) {
message( "g++ version 5.x found" )
CONFIG += g++5
} else {
contains(GCC_VERSION, 4.[0-9]) {
message( "g++ version 4.x found" )
CONFIG += g++4
} else {
message( "Unknown GCC configuration" )
}
}
}
}
ご覧のとおり、GCC からバージョンを取得して、それを正規表現と比較できます。
使い方は同じです:
SOURCES += blah blah2 blah3
g++4: SOURCES += blah4 blah5
次のマクロは、私のバージョンの gcc および g++ で定義されています。
#define __GNUC__ 4
#define __GNUC_MINOR__ 0
#define __GNUC_PATCHLEVEL__ 1
さらに、g++ は以下を定義します。
#define __GNUG__ 4
各コンパイラ ベンダーは、コンパイラとバージョンを識別する特定のシンボルを定義するために使用します。これらの記号を使用してチェックを行うことができます。
たとえば、_MSC_VER が Microsoft C++ コンパイラのバージョンを示していることは知っています。
私が知っていることは、Boost ライブラリがこの種の機能の選択と適応を使用することです。
インクルード フォルダーのパス: boost/config/* 、特に select_compiler_config.hpp にある Boost Config ヘッダーを確認できます。
これらのコンパイラ固有のシンボルを使用することにより、コード構築の前処理段階で機能の選択を行うことができます。