私はいくつかの要件を持つプロジェクトを持っています。そのうちの 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_filesystem
再path.cpp
構築すると、構築しようとしているプロパティが省略されます。