buildtool

gypでdebugとrelease設定を分ける
gypでdebugとrelease設定を分ける gypでvc2010向けのプロジェクトが生成できたので、 実用に向けて設定のテンプレート的なものを準備する。 ビルドオートメーションツールGYPを使おう https://code.google.com/p/gyp/source/browse/trunk/test/win/linker-flags/pdb-output.gyp?spec=svn1832&r=1832 を参考に設定を追加。 Debug, Release設定の追加 main.cpp projects.gyp common.gypi > gyp projects.gyp --depth . とりあえずDebugでステップ実行できた。 こりゃ、よく使うパターンの雛形を揃えるまでは苦しいですな。 premake4, cmakeもそうだった。

python製のビルドツールgypを使ってみる
python製のビルドツールgypを使ってみる gyp(Generate Your Projects) は、 pythonで記述されたプロジェクト生成ツールで設定からVC向けプロジェクトや、GCC向けMakefileを生成するツールである。 chromeやnode.jsのビルドツールとして採用されているそうな。 機能的にはpremake4やcmakeと同じ範囲をカバーするがそれぞれ以下のような問題があった。 premake4はわりと気に入っているのだが布教困難。luaで宣言的に記述するのが分かりづらい cmakeはcmake語が解読不能でちょっとしたプロジェクトのカスタマイズが困難すぎる(OpenCVとかのことだ) そこで、python製のgypを試してみた。 gyp導入 環境は、Windows7 + python3。 > python setup.py install : 中略 : SyntaxError: invalid syntax File "c:\python33\lib\site-packages\gyp-0.1-py3.3.egg\gyp\generator\ninja.py", line 475 print "Warning: Actions/rules writing object files don't work with " \ ^ SyntaxError: invalid syntax File "c:\python33\lib\site-packages\gyp-0.1-py3.3.egg\gyp\generator\xcode.py", line 126 except OSError, e: ^ SyntaxError: invalid syntax python3非対応だった。まぁpython2で。 とりあえずc++の”hello world”をビルドするところから hello_gyp + main.cpp + projects.gyp main.cpp projects.gyp

cmakeを使ってみる(Windowsかつコマンドラインで)
cmakeを使ってみる(Windowsかつコマンドラインで) ArUcoを使おうとしたら、msvcpdのvc10版を要求されてvc12でデバッグビルドが動かなかった。 最新版のOpenCV-2.4.7をゲットしてきたところvc10とvc11は含まれて居るのだが、vc12ビルドは含まれていなかった(vc2013は早すぎたかw)。 仕方ないので自前ビルドすることにした。 ということでcmakeの使い方を調べてみる。 ついでに、cmakeでビルドしたライブラリを特定のディレクトリを基準にインストールする方法を調べてみる。 練習にzlibをビルドしてインストールしてみる 以下のようなディレクトリ構成で運用してみることを目標に作業開始。 local_vc12 + bin # dll置き場 + include # dllを使うのに必要なheader置き場 + lib # dllのimportライブラリ置き場 外部依存の無い適当なライブラリで練習してみようということでzlibを選定。 さっそくcmakeを使ってみようと思ったら、zlib-1.2.8にはCmakeLists.txtが含まれとるで。 C:\src> cd zlib-1.2.8 C:\src\zlib-1.2.8> cmake -D CMAKE_INSTALL_PREFIX=C:/local_vc12 . C:\src\zlib-1.2.8> msbuild INSTALL.vcxproj C:\src\zlib-1.2.8> msbuild INSTALL.vcxproj /p:Configuration=Release 以上で下記のようになった。 C:/local_vc12 C:/local_vc12/bin C:/local_vc12/bin/zlib.dll C:/local_vc12/bin/zlibd.dll C:/local_vc12/include C:/local_vc12/include/zconf.h C:/local_vc12/include/zlib.h C:/local_vc12/lib C:/local_vc12/lib/zlib.lib C:/local_vc12/lib/zlibd.lib C:/local_vc12/lib/zlibstatic.lib C:/local_vc12/lib/zlibstaticd.lib C:/local_vc12/share C:/local_vc12/share/man C:/local_vc12/share/man/man3 C:/local_vc12/share/man/man3/zlib.3 C:/local_vc12/share/pkgconfig C:/local_vc12/share/pkgconfig/zlib.pc 素晴らしい。 OpenCV-2.4.7でやってみる C:\src> cd opencv-2.4.7 C:\src\opencv-2.4.7> cmake -D CMAKE_INSTALL_PREFIX=C:/local_vc12 .

pythonによるビルドスクリプトwafを使い始めた
pythonによるビルドスクリプトwafを使い始めた pythonによるビルドシステムwafを使ってみた。 使ってみた感触ではvcとgcc両方でビルドするとかそういうのに向いていそうなので、要するにわしのニーズに合っているように思える。 https://code.google.com/p/waf/ 前から気にはなっていたのだけれどどうにも取っ付きが悪くて使えるところまでたどりつけていなかったのだが、やっと最初の一歩を踏み出すことができたのでメモを残す。 早速実践から行く。 +hello/ +hello.cpp hello.cpp #include <iostream> int main(int argc, char **argv) { std::cout << "hello waf !" << std::endl; return 0; } というプロジェクトを作ったとする。 https://code.google.com/p/waf/downloads/detail?name=waf-1.7.13 からwaf(python scriptの圧縮されたもの)をダウンロードしてwscriptを記述する。 +hello/ +hello.cpp +waf +wscript wscriptは以下のようにする。 APPNAME='hello' VERSION='1.0.0' def configure(conf): conf.env['MSVC_TARGETS'] = ['x86'] conf.load('msvc') conf.env.CXXFLAGS = ['/nologo', '/EHsc'] def build(bld): bld.program( source='hello.cpp', target=APPNAME ) 初回とwscriptのconfigureを修正する度にconfigureする。 > python waf configure Setting top to : C:\work\_waf\hello Setting out to : C:\work\_waf\hello\build Checking for program CL : C:\Program Files (x86)\Microsoft Visual Studio 9.

wafでdebugとreleaseの設定を記述する(variant)
wafでdebugとreleaseの設定を記述する(variant) wafでdebug版とrelease版の出力を分けるにはvariantなる機能を使う。 +hello +hello.cpp +waf +wscript と前回と同様のプロジェクト。 wscriptを以下のように記述する。 # coding: utf-8 APPNAME='hello' VERSION='1.0.0' def configure(conf): # config 'debug'を作る conf.setenv('debug') # debugの設定 conf.env['MSVC_TARGETS'] = ['x86'] conf.load('msvc') conf.env.CXXFLAGS = ['/nologo', '/EHsc'] # PDBやNDEBUG等の設定をきっちり書く必要がある # config 'release'を作る。debugの設定は引き継がない conf.setenv('release') # releaseの設定 conf.env['MSVC_TARGETS'] = ['x86'] conf.load('msvc') conf.env.CXXFLAGS = ['/nologo', '/EHsc'] # BuildContextの設定 def build(bld): bld.program( source='hello.cpp', target=APPNAME ) from waflib.Build import BuildContext # BuildContextを使うコマンド class BuildDebug(BuildContext): # config 'debug' を使うvariant # 出力ディレクトリがbuild/debugに変わる variant = "debug" # 呼び出しコマンドはbuild_debug cmd = "build_debug" # BuildContextを使うコマンド class BuildRelease(BuildContext): # config 'release' を使うvariant # 出力ディレクトリがbuild/releaseに変わる variant = "release" # 呼び出しコマンドはbuild_release cmd = "build_release" variantという概念を使う。 http://docs.