2017-05-30 99 views
0

我爲一個小型項目使用Boost.Build並希望啓用C++ 17支持。據this answer,我可以通過編譯器標誌-std=c++17通過以下方式和標誌被傳播到所有可執行文件和庫:如何在我的助推jamfile中創建條件cxxflags功能?

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版本。

有沒有一種方法來設置C++版本(C++ 11/C++ 14/C++ 17)在jamfile中(或多或少)獨立於工具集的方式?

回答

0

您可以在特定情況下設置屬性(conditional requirements,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年)有一段時間。

+0

感謝您的回覆。我嘗試了你的解決方案,但是我得到了這些錯誤:'錯誤:複合特徵的擴展導致的值衝突':error:values:clang: -std = C++ 1z gcc: -std = C++ 17 ''錯誤:一個貢獻的複合材料是'這是一些新功能嗎?我使用Boost.Build 2015.07-git from boost 1.62.0。 – pschill