読者です 読者をやめる 読者になる 読者になる

ビルドツールninjaのスクリプトを書いてみたメモ.

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で%のような指定はどうするのか調べる必要があります.(あまり正しい使い方ではない気もしますが…)

  • ライブラリファイルの指定が微妙な気がする.
  • Linux+gcc用の記述を追加してみる.