Как передать cxxflags в библиотеки Boost из моего jamfile?
У меня есть проект с некоторыми требованиями, одним из которых является установка флагов компилятора / компоновщика C++11:
jamroot.jam:
project
: requirements
<toolset>clang:<cxxflags>"-stdlib=libc++ -std=c++11"
<toolset>clang:<linkflags>"-lc++"
# ... etc
;
lib mylibrary
: #sources
[ glob source/*.cpp ]
/boost/filesystem
/boost/system
/boost/thread//boost_thread
;
Специфичные для библиотеки исходные коды компилируются с необходимыми флагами C++11, однако упомянутые библиотеки Boost этого не делают. Это не вызывает конца двоичной несовместимости и ошибок компоновщика.
Я не хочу указывать cxxflags
явно в пользовательской конфигурации или в командной строке. Я хотел бы убедиться, что jamroot/jamfiles - это все, что необходимо для правильной сборки проекта.
Как мне "передать" желаемое cxxflags
в зависимые библиотеки Boost?
Обновление: я недавно пытался использовать alias
для достижения моей цели. Из документов:
Другое использование правила псевдонима - изменение свойств сборки. Например, если вы хотите статически использовать ссылку на библиотеку Boost Threads, вы можете написать следующее:
alias threads : /boost/thread//boost_thread : <link>static ;
Однако настройка этого для boost_filesystem
и восстановить, скажем, path.cpp
все еще опускает свойства, которые я пытаюсь построить.
1 ответ
Это было решено путем настройки функции (спасибо Стивену Ватанабе):
feature.feature cpp11 :
on :
composite optional propagated
;
feature.compose <cpp11>on :
<cxxflags>"-stdlib=libc++ -std=c++11"
<define>BOOST_NO_CXX11_NUMERIC_LIMITS=1
<linkflags>"-lc++"
;
project
: requirements
<cpp11>on
# ... etc
;
По-видимому, это единственный способ заставить переменные распространяться в зависимые библиотеки.