LoginSignup
0
0

More than 5 years have passed since last update.

あるコードを環境変数の値によってコンパイルするかどうか決める

Last updated at Posted at 2013-05-22

モチベーション

  • 自分がビルドしているときだけコンパイルされるコードを入れたい。
  • 特定の環境上でビルドしているときだけ組み込まれるメソッドが欲しい。

解決方法

次のマクロを使う。

# pythonじゃないよ、Booだよ。
import System
import Boo.Lang.Compiler.Ast

macro ifenv( en as ReferenceExpression, v as StringLiteralExpression ):
    # macro内のコードはマクロ展開時(コンパイル時)に実行される。
    # よって、un にはコンパイル環境上の環境変数値が代入される。
    un = Environment.GetEnvironmentVariable( en.Name )

    # 引数で指定した文字列なら、ifenvマクロの本体ブロックを展開。
    yield ifenv.Body if un == v.Value

使用方法

次のような感じ。ifdef のように使用出来る。

ifenv USER, "nistake":
    print "hello nistake!"   # 環境変数USER=='nistake'のときだけコンパイルされる。

結論

あまりオレオレコードをたくさん入れると、他人には何のゴミだと思われることもあります。

おまけ

Boo の ifdef は、この ifenv マクロと同じく、言語コアな機能ではなくただのマクロです(Booコンパイラソース " src/Boo.Lang.Extensions/Macros/IfdefMacro.boo)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0