BBv2の警告メッセージ抑制
Boost.勉強会で時間がなくて話せなかった「警告メッセージ抑制」について説明しておきます。
import path ; local broot = [ modules.peek : BOOST_ROOT ] ; local bdir = [ path.make $(broot) ] ; for local lib in graph mpi python regex { module Jamfile<$(bdir)/libs/$(lib)/build> { rule ECHO { } } }
これをuser-config.jam等に書いておくと、「ICUがない」等の警告メッセージを抑止できます。
仕組みが分からずとも使えますが、理解するにはJamfileが個別のモジュール内で動作していることを知る必要があります。
ECHO $(__name__) ;
のようなJamfileを用意して実行してみると、
Jamfile
のような出力が得られるはずです。
変数__name__には現在のモジュール名が入っているので、サブプロジェクト毎に上記のような名前のモジュールが使われていることが分かります。
また、
- モジュールはオープンである(モジュールにルールや変数を追加できる)
- 警告メッセージはECHOルールで出力されている
- ルールは「現在のモジュール」→「グローバルモジュール」の順で検索される
なので、警告メッセージを出力しているモジュール内でECHOを上書きすることで、その呼び出しをフックすることが可能です。
つまり、ECHOを空のルールで上書きすれば警告メッセージが出力されなくなるというわけです。
最近はconfigureというモジュールもメッセージを出力するので、
module configure { rule ECHO { } }
も追加するとよいでしょう。
ただし、バージョンアップした際などは一度警告メッセージを見ておくのがよいです。