Как сделать условную функцию cxxflags в своем форсированном jamfile?
Я использую 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.
Есть ли способ установить версию C++ (C++11 / C++14 / C++17) в jamfile (более или менее) независимо от набора инструментов?
1 ответ
Вы можете установить свойства для применения в определенных обстоятельствах ( условные требования в 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).