あたりまえの話ですが、グローバル変数はない!
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 を使ってみます。