Skip to content.

Sections
Personal tools
You are here: Home » コミュニティ » masarl memorial » masarl.cocolog-nifty.com » main » 2003 » 12 » Cotton Bolls: オブジェクト指向風Make

Cotton Bolls: オブジェクト指向風Make

Document Actions

« YAMLとConverter | トップページ | AOP版Generation Gapパターン »

2003.12.25

オブジェクト指向風Make

GNU Make ver3.80から導入されたevalファンクションを使えばMakefileをオブジェクト指向風に書くことができる.オブジェクトのIDを自分でつけないといけないという欠点はあるが,モジュール化されてMakefileの見通しがよくなる.次のPointクラスは,x, yというインスタンス変数,inspectというインスタンス・ターゲット,shiftというインスタンス・ファンクションが定義されている.

define Point.new
$(eval \
$1.x := $2
$1.y := $3
$1.inspect:
	echo $$($1.x)
	echo $$($1.y)
$1.shift = $$(call Point.shift,$1,$$1,$$2)
)
endef
define Point.shift
$(eval \
$1.x := $$(shell expr $$($1.x) + $2)
$1.y := $$(shell expr $$($1.y) + $3)
)
endef

利用例はこんな感じ:

all: pt.inspect
$(call Point.new,pt,10,20)
$(call pt.shift,3,2)

一度これを作ってMakeのみで動作するJUnitもどきのテスティングフレームワークを作ってみたが,evalファンクションのバグで頓挫してしまった.evalファンクションの中身が複雑になると

*** virtual memory exhausted.  Stop.

というエラーが出てしまうためだ.将来バグフィックスされたら使えそうかな.

10:41 AM in Make | 固定リンク

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/48615

この記事へのトラックバック一覧です: オブジェクト指向風Make:

コメント

コメントを書く