Bud って何?

Bud は D言語でのアプリケーションの構築を助けます。

いままで使用するファイルを列挙してコンパイルしていました。

dmd main.d sub1.d sub2.d ... //めんどい

それを Bud を使うと main.d の指定だけですみます。

bud main.d //らくちん

Bud でデバッグビルドはどうやるの?

Bud が知らないスイッチはコンパイラに渡すようになっています。

だから今までどおりにコンパイルオプションを指定するだけです。

bud main.d -debug //デバッグビルド

プラグマ

追加のプラグマが使えます

追加されたプラグマは Version build で囲んでください。

version(build){ pragma(link,foo); }

link

これはリンクするライブラリを指定します。

//foo.lib にリンクする
version(build){ pragma(link,foo); }

定義済みプラグマの lib と違いライブラリを文字列で指定しない

ライブラリは , で区切り列挙できる

//foo.lib と bar.lib と baz.lib にリンクする
version(build){ pragma(link,foo,bar,baz); }

nolink

そのモジュールのオブジェクトファイルにリンクしない

version(build){ pragma(nolink); }

ignore

このモジュールはコンパイラおよびリンカに渡されない

all.d なんかに指定するみたい

include

C の #include みたいのファイルを取り込む

target

出力ファイルの名前を指定

通常コマンドラインで最初に指定したファイル名で出力される

それを別な名前で指定できる

複数存在した場合は最初のものが有効

build

そのほかの外部ツールを使う

たとえばリソースファイルをコンパイルするとか

設定は後述の Rule Definition File で行う

export_version

コンパイラに version 識別子を渡す

build_def

リンカに渡す .def ファイルの内容を記述できる

Rule Definition File

マクロ

Cのマクロのような、文字列の置き換えができる。

マクロは別ファイルに定義する

//C
#define ONE 1

//MDF
replace ONE=1 //ONE に一致するがONETWO には一致しない


//MDF
replace "ONE"=1 //ONETWO に一致するが ONE には一致しない


//MDF
replace ONE="1" //引用符で囲まなければ前後に空白文字が入る

replace を regexp に変えると正規表現が使える

スイッチ

設定ファイル