waf

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.