我正在将Boost.Build用于一个小项目,并希望启用C ++ 17支持。根据{{3}},我可以通过以下方式传递编译器标志-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)?
答案 0 :(得分:0)
您可以设置要在特定情况下应用的属性(b2
中的conditional requirements),这样只有在满足这些要求时才会添加它们。您可以使用的一个可能的要求是工具集规范(如果需要,一直到版本)。在你的情况下,你可能想要这样的东西:
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年)有一段时间。