bjam AdC jp 2011 23日目
はー
Boost.Build PythonPortとは
ラスト二回はPythonPortについてにします。と言っても使ったこと無いのでドキュメント見ながら書いてます。
Boost.Build PythonPortに関するドキュメントはこちら。
※注 Boost.Build PythonPortは現状でexperimental扱いです。www.boost.orgではアンドキュメント扱いなので場合によっては正しくビルドされないかも知れません。
とりあえずこのPythonPortとはなんぞやということから。本家ではBoost.Build(bjam)には以下問題があると言っています。
- どマイナーすぎてだれも使ってないし開発者がいないのはやばい
- bjamいみわからん
- 標準ライブラリないし使えない
- データ構造が文字列のリストしか無くて使えないし遅い
肯定しかできないのが素晴らしいですね。
ということで、メジャーだしBoost.PythonあるしPython使おうということになったのです。
現状ですべて実装されているようです。また、1:1で対応がとれているらしいので使ってみるといいかも知れないです。
と書かれてますが一部エラーになったりしました...
Boost.Build PythonPortのビルド
実はtools/build/v2/bootstrap.shを実行するだけではPythonPortは有効になりません。
1.48.0現在は以下のようにする必要があります。
cd $BOOST_ROOT/tools/build/v2 ./bootstrap.sh cd engine ./build.sh --with-python=/usr TOOLSET=`./build.sh --guess-toolset` ARCH=`./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target` cp -f engine/$ARCH/b2 engine/$ARCH/bjam .. cd .. sudo ./b2 install --prefix=$PREFIX sudo cp -f *.py *.pyc $PREFIX/share/boost_build/
bootstrap.shに特設渡すことができないので面倒です。Windows環境では--with-pythonにPythonがインストールされてるパスを渡した上で、Boost.Buildがインストールされたディレクトリにも必要なファイルをコピーする必要があります。
Boost.Build PythonPortでビルドする
以上のことをしてPythonPortが有効なbjamを用意したらあとは手元のプロジェクトをビルドするだけです。
いつもの通りbjamを起動するだけではPythonPortは使用されません。bjamに--pythonを渡します。
tools/build/v2/example/helloをPythonPortでビルドしてみると以下のようになります。
$ bjam --python Boost.Build V2 Python port (experimental) ...found 10 targets... ...updating 4 targets... common.MkDir1-quick-fix-for-unix ./bin/gcc-4.6.3 common.MkDir1-quick-fix-for-unix ./bin/gcc-4.6.3/debug gcc.compile.c++ ./bin/gcc-4.6.3/debug/hello.o gcc.link ./bin/gcc-4.6.3/debug/hello ...updated 4 targets...
ちなみにJamでビルドするとこんな感じ。微妙に違います。
$ bjam ...found 9 targets... ...updating 5 targets... common.mkdir bin common.mkdir bin/gcc-4.6.3 common.mkdir bin/gcc-4.6.3/debug gcc.compile.c++ bin/gcc-4.6.3/debug/hello.o gcc.link bin/gcc-4.6.3/debug/hello ...updated 5 targets...
つまり
次回はPythonで書きましょう。