1

我有一个项目有一些要求,其中之一是设置 c++11 编译器/链接器标志:

果酱根.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 库?

更新:我最近尝试使用 analias来实现我的目标。从文档

别名规则的另一个用途是更改构建属性。例如,如果您想使用静态链接到 Boost Threads 库,您可以编写以下代码:

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

然而,设置它boost_filesystem并重建,比如说,path.cpp仍然省略了我试图构建的属性。

4

1 回答 1

1

通过设置一个功能解决了这个问题(感谢 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
    ;

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

于 2013-10-29T15:41:01.333 回答