1

私はいくつかの要件を持つプロジェクトを持っています。そのうちの 1 つは、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、目標を達成するために を使用してみました。ドキュメントから:

エイリアス ルールのもう 1 つの用途は、ビルド プロパティを変更することです。たとえば、Boost Threads ライブラリへのリンクを静的に使用する場合は、次のように記述できます。

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

ただし、これを設定してboost_filesystempath.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 に答える