Rake
Make, Antの類い
ポイントはRubyの内部DSLとして使えるので途中でRubyが使えること。
以下を参照しつつ。どれもわかりやすいです。
C言語のビルドでほのぼのrakeでmakeするよ | Futurismo
Rake
allabout.co.jp
unageanu.hatenablog.com
インストールはgem install rakeでできる。
タスクによる依存関係記述
task default: %w[A] task :A => [:B,:C] task :B task :C
デフォルトタスクが出発点
rakefileという名前で保存し、タスクを実行させてみる。
rake ** Invoke default (first_time) ** Invoke A (first_time) ** Invoke B (first_time) ** Execute B ** Invoke C (first_time) ** Execute C ** Execute A ** Execute default
特定のタスクから実行
rake -t B ** Invoke B (first_time) ** Execute B
タスクにアクションを定義する。
task default: %w[A] task :A => [:B,:C] do p "A!" end task :B do p "B!" end task :C do p "C!" end
rake "B!" "C!" "A!"
タスクに引数を渡す
task default: %w[A] task :A,[:name] => [:B,:C] do |t, args| p "A!" p t p args.name end task :B do p "B!" end task :C do p "C!" end
tにタスク名、argsに引数が入る。
使うときはrakeにタスク名と引数に入れる値を入れて呼び出す。
rake "A[poi]" "B!" "C!" "A!" <Rake::Task A => [B, C]> "poi"
namespaceでまとめる
task default: %w[A] namespace :AA do task :A,[:name] => :B do |t,args| p "A!" p args.name end task :B,[:name] do |t,args| p "B!" p args.name end end
実行するときはネームスペース:タスクで
rake "AA:A[poipoi]" "B!" "poipoi" "A!" "poipoi"
説明文
task default: %w[A] desc "Aの実行" task :A,[:name] => :B do p "A!" end desc "Bの実行" task :B,[:name] do p "B!" end
オプションで-Tをつけるとタスクの説明が表示される。
rake -T rake A[name] # Aの実行 rake B[name] # Bの実行
rake "B!" "A!"
そのファイルがなければ実行するタスク ファイルタスク
task default: %w[A.txt] file "A.txt" do p "A!" end
実行
rake "A!"
A.txtを作ると実行されなくなる。
touch A.txt
rake
ディレクトリななければそのディレクトリを作成するタスク
task default: %w[poge] directory "poge"
rake mkdir -p poge
もう一度やると何もおきない。
rake
ルール 複数のタスクをまとめて定義する。
rule ".c" do |t| p t end
これでa.cというタスクが作られている。
rake a.c <Rake::FileTask a.c => []> rake d.c <Rake::FileTask d.c => []>
依存関係を使うと
rule ".o" => ".c" do |t| p t end rule ".c" do |t| p t end
とすれば
rake d.o <Rake::FileTask d.c => []> <Rake::FileTask d.o => [d.c]>