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

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

Другие вопросы по тегам