にゃははー

はへらー

Boost.Build v2の誰てめ

ところで君はだれだい?

numbers.log10

名前の通り常用対数を取るruleです。

import numbers ;

ECHO [ numbers.log10 1 ] ; # => 0
ECHO [ numbers.log10 100 ] ; # => 2

注意なのが、bjamは全て文字列で処理するのでパラメータと戻り値は全て正数です。悲しいことに。

誰が使うのでしょうか。

container.vector

std::vectorとかstd::listをリスペクトしたものらしいです。sequenceあるのでいらない気もしますが。

vectorの要素は全てclass nodeから派生している必要があって、vectorもnodeから派生しています。
実際はクラスの派生関係は見ていないのでインターフェースが合えば問題無いです。

container.vector.get-at ruleは複数の引数を投げることができて、vectorを入れ子にしているときに多次元っぽくアクセスできる程度のありがたみがあります。
結局内部はsequenceなのでindexは1-origです。

import "class" ;
import container ;

v = [ class.new vector
  [ class.new vector [ class.new node 1 ] 2 3 4 ] ] ;

ECHO [ $(v).get-at 1 : 1 ] ; # => 1
ECHO [ $(v).get-at 1 ] ; # => object(node)#659 2 3 4
#ECHO [ $(v).get-at 1 : 2 ] ; # => error 2はnodeの派生オブジェクトではない

最後のエラーがわかりづらいですが、C++っぽく書くと

vecotr<vector<int>> v = { { node(1), 2 3 4 } };
std::cout << v[0][0].get() << std::endl;
std::cout << v[0].get() << std::endl;
std::cout << v[0][1].get() << std::endl;

的な感じになるので(get-atの最後はget ruleが呼ばれる)無理ですねハイって感じです。
nodeのget ruleはnodeの値そのものを返しますが、vectorのget ruleはsequenceを返します。

超絶使いづらいです。
あ、でもいま使ってます。

message.jam

toolsetにはmessage.jamというファイルがあります。toolset以下にありますがusingではなくimportを使うtoolsetです。

で、こいつは何をするかというと文字通り文字列を表示するだけです。

import message ;

message.message hoge : fuga ;
$ bjam
fuga
...found 1 target...

ECHOとの違いは表示されるタイミングですが、説明が面倒なので省きます。
ちなみにBoostのビルドで最初に文字列が出ますが、あれはmessageを使ってます。

mc.jam / midl.jam / rc.jam

Win32でつかうあれなものをコンパイルするときに使うtoolset達。
GUIもちゃんとビルドできるんですね。使わないけど。

気がついた

もっとあるかと思ったけどよくよく眺めると微妙に使いそうな物が多い。
そしてそもそもBoost.Buildは小さいのでなんというかあややー?