exec.register-exec-all

execルールをさらに改良しました。
exec.jamの差分
execルールの目的は、

  • ユニットテストとは関係なく単に実行したい
  • 実行の成否に関わらず、毎回明示的に実行したい
  • bjamで生成したDLLへのPATHを自動で設定したい

なので、予め決まったラウンチャや引数で実行するよりもコマンドラインから指定できたほうが便利だと考えました。
そこで、これらの設定をフィーチャーで指定するのをやめて--debuggerオプションと--argsオプションで指定できるように変更しました。
これで、

import exec ;
exe hoge : hoge.cpp ;
exec hoge-run : hoge ;

というJamfileを書いておくと、

# gdbからhogeを実行
bjam hoge-run --debugger=gdb

とか、

# hogeに引数「1.txt 2.txt」を指定して実行
bjam hoge-run --args="1.txt 2.txt"

といったことが可能になります。


おまけで、カレントプロジェクトのexeすべてにexecを呼び出すregister-exec-allルールも用意しました。

rule register-exec-all ( )
{
    import "class" ;
    import project ;

    local proj = [ project.current ] ;

    # アクセッサがないので、self.alternativesメンバを覗き見
    local targets = [ modules.peek $(proj) : self.alternatives ] ;

    for t in $(targets)
    {
        if [ class.is-a $(t) : typed-target ] && [ $(t).type ] = EXE
        {
            local name = [ $(t).name ] ;
            exec $(name)-run : $(name) ;
        }
    }
}

これをJamfileの末尾で呼んでおけば「exeターゲット名-run」という名前でexecターゲットが作成されます。
早速Hamigakiライブラリの各exampleディレクトリで使うようにしてみました。


これでbjam_winを作り始めた動機は全て解決できたので、そろそろ別の話題に移りたいと思います。bjam_winは中途半端ですが。