Rakeメモ - file
Makeでいうルールの定義がfileですね。
file 'hoge' => ['hoge.c', 'hoge.h'] do |task| sh "gcc hoge.c -o hoge" end
- ファイル 'hoge' が 'hoge.c', 'hoge.h' に依存していることを表す。
- 'hoge'を生成するのに、ブロックの中のsh "..."を実行する。
- 引数taskには、Taskクラスのインスタンスが渡される。(Taskクラスは後述)
- shメソッドによってシェルを呼び出す。
- FileUtilsを継承したRakeFileUtilsモジュールに定義されており、includeされている。
- FileUtilsのメソッドと同じく{:verbose => true, :noop => true}でオプションを渡せる。
- verboseオプションに合わせて、標準エラー出力に実行コマンドを出すなど、execやsystemよりRake向けになっている。
- ソースを見たところMakeのSHELL変数のようにシェルを変更することはできないようだ。
- mkdir, rm等はFileUtilsに定義されており、includeされているので、通常のシェルに近い感覚で使える。
- ブロックは省略可能。
- ターゲットのファイルが、依存先のファイルよりも新しければ、実行しない。
fileメソッドに{'hoge' => ['hoge.c', 'hoge.h']}なHashとブロックを渡してるだけで単なるメソッド呼び出しなのですが、Makefileと同じような構文になっていて読みやすいです。
file 'hoge' => ['hoge.c'] file 'hoge' => ['hoge.h']
- 複数回実行した場合は、上書きではなく依存先リストに追加される。