Hatena::ブログ(Diary)

fjnlの生存記録のような何か このページをアンテナに追加 RSSフィード Twitter

2011-07-31

夏休みなのでbjam始めてみます 3日目

0xの使い方やライブラリ回りは、プロのbjammerことid:Flast先生に教えてもらいました。

複数のソースから1つの実行ファイルを作りたい

単に依存関係を並べればいいようです。

Jamroot:

exe a : a.cpp b.cpp ;
$ $BOOST_ROOT/bjam release
...found 13 targets...
...updating 6 targets...
common.mkdir bin
common.mkdir bin/darwin-4.6
common.mkdir bin/darwin-4.6/release
darwin.compile.c++ bin/darwin-4.6/release/a.o
darwin.compile.c++ bin/darwin-4.6/release/b.o
darwin.link bin/darwin-4.6/release/a
...updated 6 targets...

システムに入ってるライブラリを使いたい

requirementsの所に<name>で名前を教えてあげればいいようです。ただし、先頭のlibはいりません(libz→z、libpng→png)。システム標準でない場所にライブラリが入っている場合は<search>で場所を教えてあげます。

Jamroot:

lib z : : <name>z <search>/opt/local/lib : : <include>/opt/local/include ;
exe a : a.cpp z ;

a.cpp

#include <iostream>
#include <zlib.h>

int main() { std::cout << zlibVersion() << '\n'; return 0; }
$ $BOOST_ROOT/bjam release
...found 11 targets...
...updating 5 targets...
common.mkdir bin
common.mkdir bin/darwin-4.6
common.mkdir bin/darwin-4.6/release
darwin.compile.c++ bin/darwin-4.6/release/a.o
darwin.link bin/darwin-4.6/release/a
...updated 5 targets...
$ ./bin/darwin-4.6/release/a
1.2.5

C++0xを使いたい

projectのrequirementsでオプションを追加してあげればいいようです。

Jamroot:

project : requirements <cxxflags>-std=c++0x ;
exe a : a.cpp ;

FlastFlast 2011/07/31 19:11 複数のソースを一気にコンパイルしたい場合、glob/glob-tree ruleが使えます。(glob-treeは再帰的に探索するバージョン
ファイルが今後増えたりするような場合、ファイル名を列挙するより
exe a : [ glob-tree *.cpp ] ;
とするとprojectのディレクトリから再帰的に探索してマッチするファイルのリストを返します。それを直接exe ruleに投げてやれば全てのcppファイルがビルド対象になって便利です。

ライブラリはターゲットを作ってもいいですが、(lib z : : ...)exeやprojectのrequirementsに対して<find-shared-library>z か<find-static-library>zでもおkです。
projectのrequirementsやusage-requirementsに書いておけばターゲット毎にいちいち書く必要がなくて便利です。
当然<search>は同様に必要ですが。

トラックバック - http://d.hatena.ne.jp/fjnl/20110731/1312102922