## プロジェクト

### プロジェクト階層

`Jamroot`または`project-root.jam`があるディレクトリがプロジェクトルートになり、その配下のディレクトリ階層がプロジェクトの階層に対応する。`C:\Boost\boost_1_34_0`に`project-root.jam`がある場合のプロジェクトboostの例を示す。

プロジェクトID | パス | 意味
--- | --- | ---
/boost | `C:\Boost\boost_1_34_0` | boostプロジェクトのプロジェクトルート
/boost/doc | `C:\Boost\boost_1_34_0\doc` | boostプロジェクトのサブプロジェクトdoc
/boost/libs/filesystem/test | `C:\Boost\boost_1_34_0\libs\filesystem\test` | boostプロジェクトのサブプロジェクトlibs/filesystem/test

### Jamfile

プロジェクトの設定はプロジェクトのディレクトリ中の`Jamfile`で行う。このファイルは、「Jamfile<プロジェクトのディレクトリ名>」という名前のモジュールとして評価される。

現在のプロジェクトに別名を付けたり、プロジェクトとそのサブプロジェクトに共通の設定を行うには、標準ルールprojectを用いる。

    rule project ( id ? : options * : * )

第一引数の`id`はプロジェクトの名前であり、第二引数以降はプロジェクト属性の名前とプロパティのリストを組にして指定する。プロジェクト属性には以下のようなものがある。

属性名 | 意味
--- | ---
source-location | ソースファイルの位置
requirements | ビルドに必要なプロパティ
default-build | コマンドラインや依存するターゲットのdefault-buildでの指定がない場合のみ使用されるプロパティ
build-dir | 出力先ディレクトリ

プロジェクト属性の指定順序は自由である。

    # あるプロジェクトの設定
    project project_a
        : source-location src
        : build-dir bin
        ;

    # 別のプロジェクトの設定
    project project_b
        : requirements <threading>multi
        : build-dir bin.v2
        : source-location src
        ;

### プロジェクト定数

プロジェクト全体(サブプロジェクトを含む)で使用したい定数を設定するには標準ルールconstantを用いる。パスの定数を設定するのに便利なpath-constantルールもある。

    # プロジェクト定数DEBUG_LEVELに5を設定する
    constant DEBUG_LEVEL : 5 ;
    # このプロジェクトとサブプロジェクトでは$(DEBUG_LEVEL)で値を取得できる

    # プロジェクト定数ROOTにカレントディレクトリを設定する
    path-constant ROOT : . ;
    # このプロジェクトとサブプロジェクトでは$(ROOT)で値を取得できる
    # 相対パスは設定時のプロジェクトのディレクトリを基点として絶対パスに変換される

### 環境設定

全てのプロジェクトの親プロジェクトとして、site-configとuser-configの二つが使用される。(site-configはuser-configの親プロジェクトである。)

site-configとuser-configはそれぞれsite-config.jam、user-config.jamというファイルで定義される。これらのファイルは次表に示す順序に従い検索される。

プラットフォーム | site-config.jam | user-config.jam
--- | --- | ---
POSIX |
/etc
$HOME
$BOOST_BUILD_PATH
$HOME
$BOOST_BUILD_PATH
Windows |
%SystemRoot%
%HOMEDRIVE%%HOMEPATH%
%HOME%
%USERPROFILE%
%BOOST_BUILD_PATH%
%HOMEDRIVE%%HOMEPATH%
%HOME%
%USERPROFILE%
%BOOST_BUILD_PATH%

これらのファイルで、グローバル変数やプロジェクト定数を設定することでBBv2の動作をカスタマイズすることができる。