2017-05-30 8 views
0

私はBoost.Buildを小さなプロジェクトに使用しており、C++ 17のサポートを有効にしたいと考えています。 this answerによると、私は次のようにコンパイラフラグ-std=c++17を渡すことができますし、フラグがすべての実行可能ファイルとライブラリに伝播されます。私はgcc7でtoolset=gccを使用する場合私のブーストjamfileで条件付きcxxflags機能を作成するにはどうすればよいですか?

import feature ; 
feature.feature cpp17 : on : composite optional propagated ; 
feature.compose <cpp17>on : <cxxflags>"-std=c++17" ; 

project myproject : requirements <cpp17>on ; 

これが正常に動作します。しかし、他のコンパイラでは、C++ 17モードが別の方法で有効になります。例えば、Clang 3.9は、-std=c++17の代わりに-std=c++1zが必要です。 MSVCでは、C++のバージョンはMSVCのバージョンによって異なります。

(多かれ少なかれ)ツールセットに依存しない方法で、jamfileにC++バージョン(C++ 11/C++ 14/C++ 17)を設定する方法はありますか?

答えて

0

特定の状況(conditional requirements in b2の意味)に適用するようにプロパティを設定すると、要件が満たされたときにのみプロパティが追加されるように設定できます。使用可能な要件の1つに、ツールセット仕様(必要に応じてバージョンまで)があります。 ...我々はそれを追加することに取り組んでいるC++標準バージョンを設定する「ツールセットの独立」の方法については

import feature ; 
feature.feature cpp17 : on : composite optional propagated ; 
feature.compose <cpp17>on : 
    <toolset>gcc:<cxxflags>"-std=c++17" 
    <toolset>clang:<cxxflags>"-std=c++1z" ; 

project myproject : requirements <cpp17>on ; 

:あなたのケースでは、おそらくこのような何かをしたいです。この秋(2017年)のある時期を期待してください。

+0

ご回答いただきありがとうございます。私はあなたのソリューションを試しましたが、私はこれらのエラーを取得しました: 'エラー:コンポジットフィーチャの展開により、の値が矛盾します'エラー:値:clang: -std = C++ 1z gcc: -std = C++ 17 「エラー:1つのコンポジットプロパティがにありました」これはいくつかの新機能ですか? Boost.Build 2015.07-gitをboost 1.62.0から使用しています。 – pschill

関連する問題