にゃははー

はへらー

複数のobjを束ねる

例えばあるprojectがあって、

project /
  : source-location ./src
  ;
exe x : [ glob *.cpp ] ;

とあるぐらいなら別に問題にならないけど、

project /
  : source-location ./src
  ;
obj module/a : module/a.cpp ;
obj module/b : module/b.cpp ;
alias module : module/a module/b ;

exe x : [ glob *.cpp ] module ;
exe y : y.cpp module ;

とかなりはじめるといちいちobjルールなんぞ書かないといけなくなり始める。

projectが1つしか無いならobjにしないでソースをそのまま投げればいいけど、別の階層にあるサブプロジェクトとかでも使いたくなる場合があるわけで、例えばモジュール単位での単体テストとか。

でも実は別階層のやつにソースを投げると悲しいことが起きる。
簡単に言ってしまえばまたビルドし始めるわけだ。
リビルドされると単体テストとかでは困るわけでどうにか複数のobjをaliasみたいに1つに束ねて扱いたい。

しかしlibにするまでもないものってのが多いわけで、じゃぁobjを大量に書くかっていうとtarget名をいちいち全部に書かないといけなくてめんどいしわかりづらくなる。

motivationをつらつら書くとつまり上のような感じで、コードで示すと、

obj module : module/a.cpp module/b.cpp ;

をやりたいということ。


なので書いた。
https://github.com/Flast/build.extensions/blob/master/tools/types/objset.jam

使い方はbuild.extensionsを使えるように*-config.jamを用意してやれば後は自動で

objset module : module/a.cpp module/b.cpp ;

ができる。


みんなってこういうこと無いのかな...