Boost.Build v2(CVS HEAD)での挙動
Boost.Build v2について、日本語の文献は非常に少ないですが、id:Cryoliteさんが詳述([id:Cryolite:20060205#p1])していました。そこで、その記述を、Boost C++ Librariesの2006/02/11現在のCVS HEADを用いて検証してみました。私が検証した環境は、以下のとおりです。
- Debian GNU/Linux (sid)
- gcc (GCC) 4.0.3 20060128 (prerelease) (Debian 4.0.2-8)
Jamfileについて
唯一、引っかかったのは、パスを正規化するところです。現在は、[id:Cryolite:20060205#p1]で修正されています。
boost-root = [ modules.peek : BOOST_ROOT ] ; # 環境変数 BOOST_ROOT の値を取得 boost-root = [ path.make : $(boost-root) ] ; # パスを正規化
とありますしたが、私が試したところ、
$ bjam Jamfile:11: in load-aux *** argument error * rule path.make ( native ) * called with: ( : $(BOOST_ROOT) ) * missing argument native $(BOOST_ROOT)/tools/build/v2/util/path.jam:42:see definition of rule 'make' being called $(BOOST_ROOT)/tools/build/v2/build/project.jam:312: in load-jamfile $(BOOST_ROOT)/tools/build/v2/build/project.jam:68: in load $(BOOST_ROOT)/tools/build/v2/build/project.jam:164: in project.find $(BOOST_ROOT)/tools/build/v2/build-system.jam:142: in load $(BOOST_ROOT)/tools/build/v2/kernel/modules.jam:261: in import $(BOOST_ROOT)/tools/build/v2/kernel/bootstrap.jam:121: in boost-build $(BOOST_ROOT)/tools/build/v2/boost-build.jam:2: in module scope
となります。そこで、$(BOOST_ROOT)/tools/build/v2/util/path.jamを参照して、path.makeの定義を調べたところ、
# # Converts the native path into normalized form. # rule make ( native ) { return [ make-$(os) $(native) ] ; }
となっていました。どうも、コロンが余計のようです。そこで、path.makeの呼び出し行を、
boost-root = [ path.make $(boost-root) ] ; # パスを正規化
と変更したところ、動くようになりました。なお、Windows環境でどうなるかは、私がWindowsの開発環境を構築していないので、よくわかりません。
unit-test-frameworkについて
run hello.cpp # run ルールについては下記参照 /boost/test//boost_unit_test_framework # boost_unit_test_framework ライブラリを直接引っ張ってくる ;
上記の指定の仕方でも動くのですが、$(BOOST_ROOT)/Jamfile.v2には、
alias unit_test_framework : libs/test/build//boost_unit_test_framework ;
の記述があります。そこで、
run hello.cpp /boost//unit_test_framework ;
と簡略指定してもよいようです。実際、Boost C++ Librariesからみてどちらがより好ましいのかは、よくわかりません。