Ninja, a small build system with a focus on speed
素早いビルドが可能と話題のninjaを試してみました.しかし,僕自身巨大だったり,クロスプラットフォーム対応だったりするC++プログラムを書いたことがないので,実際の運用というのがいまいちわかりませんね…
参考にしたのは以下のエントリです.
ninja build tools使い方メモ - 北海道日記
Wonderlands in Usagi's brain: さすがNinja素速い…(気がする)
手に入れる
Releases · ninja-build/ninja · GitHub
GitHub releasesで取得します.zipファイルを解凍すればninja.exeが手に入ります.
スクリプトを書く
VCのコンパイラを用いてARToolKitを用いたプログラムをビルドするスクリプトを書いてみました.コンパイラ,リンカをフルパスで指定しているのは良くないと思うのですが,あらかじめパスを通したclが64bit版であり,32bit用にビルドされたライブラリであるARToolKitを使用するために32bit版clを使用するためです.
compile_command = cl compile_options = link_command = link link_options = libs = libAR.lib libARgsub_lite.lib libARgsub.lib libARgsubUtil.lib libARMulti.lib libARvideo.lib cl_dir = c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin rule compile command = $cl_dir\$compile_command $compile_options $in $libs rule link command = $cl_dir\$link_command $link_options $in $libs build main.obj : compile main.cpp build main.exe : link main.obj
build.ninjaという名前で置いておき,ninjaを実行すればビルドが走ります.
make cleanに値するものはninja -t cleanで行えます.
TODO
- 複数ファイルの指定はどうするか.
例えば,同じディレクトリにある.cuファイルすべてを用いてnvccでビルドするmakefileは以下のようになります.
main.exe: main.obj nvcc -arch=sm_30 -lglew64 -lglut64 -lAntTweakBar64 -o $@ $^ %.obj: %.cu nvcc -arch=sm_30 -dc $^ -o $@ clean : rm *.obj
存在するすべてのファイルに対してbuild hoge.obj : compile main.cppなどと書くのは面倒です.ninjaで%のような指定はどうするのか調べる必要があります.(あまり正しい使い方ではない気もしますが…)