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 { }
}

も追加するとよいでしょう。
ただし、バージョンアップした際などは一度警告メッセージを見ておくのがよいです。