モチベーション
コンパイルしたときの日時情報(C/C++ の __DATE__ や __TIME__)が欲しくなることがあります。
解決方法
次のマクロを使う。マクロの展開がコンパイル時であることを利用する。
# pythonじゃないよ。Booだよ。
import Boo.Lang.Compiler.Ast
# build_date: 引数名の変数にコンパイル日時を代入するコードを生成するマクロ。
macro build_date( vn as ReferenceExpression ):
# この行はコンパイル時(build_date が展開されるとき)に実行されるので、dt にはコンパイル時の日時文字列が代入される。
dt = System.DateTime.Now.ToString()
# ここはコンパイル時に展開されて、ランタイムコードとなる部分。
yield [|
$(vn) = $(dt) # コンパイル日時文字列をコードに埋め込む。
|]
次のように使う。
build_date bd
print "build: ${bd}"