如何在boost文件中创建条件cxxflags功能?

如何在boost文件中创建条件cxxflags功能?,boost,boost-build,b2,Boost,Boost Build,B2,我正在为一个小项目使用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 : re

我正在为一个小项目使用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 ;
导入功能;
feature.feature cpp17:打开:组合可选已传播;
feature.compose on:“-std=c++17”;
项目myproject:对项目的要求;
当我将
toolset=gcc
与gcc7一起使用时,这很好用。但是,在其他编译器上,C++17模式是以另一种方式启用的。例如,Clang3.9期望的是
-std=c++1z
,而不是
-std=c++17
。在MSVC中,C++版本依赖于MSVC版本。
<> P>有一种方法(在某种程度上)独立于工具集(C++)中的C++版本(C++ 11/C++ 14/C++ 17),在特定的环境下(在<代码> B2< /Calp>语句中),可以设置属性,以便在满足这些要求时才添加它们。您可以使用的一个可能需求是工具集规范(如果需要,可以一直到版本)。在您的情况下,您可能需要以下内容:

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 ;
导入功能;
feature.feature cpp17:打开:组合可选已传播;
feature.compose on:
gcc:“-std=c++17”
叮当声:“-std=c++1z”;
项目myproject:对项目的要求;

作为一个“工具集无关”的C++标准版本设置方式。我们正在努力增加这一点。预计今年秋天(2017年)的某个时候

谢谢你的回复。我尝试了您的解决方案,但我得到了以下错误:
错误:复合特性的扩展导致
的值冲突错误:值:clang:-std=c++1z gcc:-std=c++17
错误:一个有贡献的复合特性处于启用状态这是新特性吗?我正在使用Booost .Budio2015.07GIT从Boost 1.62.0。@ GrafikRobot是否已经有一个“工具集无关”的设置C++标准版本的方法?@现在可以使用cxxstd特性来指定这一点,并使用cxxstd方言特性来进一步自定义这一点