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),以便仅在满足这些要求时才添加它们。您可以使用的可能要求之一是工具集规范(如果需要,一直到版本)。在你的情况下,你可能想要这样的东西:

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 回答