Как передать 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
;

По-видимому, это единственный способ заставить переменные распространяться в зависимые библиотеки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector