あたりまえの話ですが、グローバル変数はない!

Boost.Build は階層構造を作ることができます。

  • project-root.jam
  • Jamfile
  • /A
    • Jamfile
    • /B
      • Jamfile
    • /C
      • Jamfile

のように、各フォルダに Jamfile を置き、ルートに project-root.jam を置くことで、階層構造を作ることができるわけです。さて、この階層構造を使おうと思ったときに、インクルードパスなど共通して使う設定をルートの Jamfile で行いたいと普通は思います。そこで、そのインクルードパスを INCLUDES という名前にして、

INCLUDES = c:/usr/prg/boost_1_31_0 ./Code ;

などと宣言し、サブフォルダにある /A/Jamfile で参照しようとすると...できない。変数を定義すると、各ファイル内でのローカル変数的に扱われます。親フォルダにあるJamfile内の変数を読みに行くことができません。ほんじゃあ、何が子に引き継げるのか、血眼になってここ2,3日探した結果、「プロジェクト属性」が引き継げるということがわかりました。
つまり、/Jamfile で、

INCLUDES = c:/usr/prg/boost_1_31_0 ./Code ;
project : requirements $(INCLUDES) ;

とすれば、これ以降、サブフォルダの Jamfile では何も指定することなくインクルードパスが引き継げるわけです。ふぅ、こんだけのことを調べるのに、えらい苦労しました。でも、苦労のおかげで、Boost.Build がだいぶわかってきた気がします。慣れれば、結構いけるツールかもしれません。boost 狂信者なので、しばらく Boost.Build を使ってみます。