如何从我的jamfile中将cxxflags传递给Boost库?

时间:2013-10-25 20:48:44

标签: c++ boost c++11 dependencies bjam

我有一个有一些要求的项目,其中一个是设置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库提到了。这导致二进制不兼容性和链接器错误无法结束。

我不想在user-config或命令行中明确指定cxxflags。我想确保干草根/果酱文件是正确构建项目所必需的。

如何将所需的cxxflags“传递”到依赖的Boost库?

更新:我最近尝试使用alias来实现我的目标。来自the docs

  

别名规则的另一个用途是更改构建属性。例如,如果要将静态链接用于Boost Threads库,可以编写以下内容:

alias threads : /boost/thread//boost_thread : <link>static ;

然而,为boost_filesystem设置此项并重建,例如,path.cpp仍然会省略我正在尝试构建的属性。

1 个答案:

答案 0 :(得分:1)

这由setting up a feature解决(感谢Steven Watanabe):

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
    ;

显然,这是将变量传播到依赖库的唯一方法。