0

小さなプロジェクトに Boost.Build を使用しており、C++17 のサポートを有効にしたいと考えています。この回答によると、次の方法でコンパイラ フラグを渡すことができ-std=c++17、フラグはすべての実行可能ファイルとライブラリに伝達されます。

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

project myproject : requirements <cpp17>on ;

これはtoolset=gcc、gcc7 で使用すると問題なく動作します。ただし、他のコンパイラでは、C++17 モードは別の方法で有効になっています。たとえば、Clang 3.9-std=c++1zでは、代わりに-std=c++17. MSVC では、C++ のバージョンは MSVC のバージョンに依存します。

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

4

1 に答える 1

0

特定の状況 (用語では条件付き要件)で適用されるプロパティを設定b2して、それらの要件が満たされた場合にのみ追加されるようにすることができます。使用できる要件の 1 つは、ツールセットの仕様 (必要に応じてバージョンまで) です。あなたの場合、おそらく次のようなものが必要です:

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 ;

C++ 標準バージョンを設定する「ツールセットに依存しない」方法については..それを追加する作業を行っています。今年の秋(2017 年)にはそれが期待されます。

于 2017-08-01T03:10:21.423 に答える