Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

Rake

Make, Antの類い

ポイントはRubyの内部DSLとして使えるので途中でRubyが使えること。

以下を参照しつつ。どれもわかりやすいです。

koseki.hatenablog.com

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]>

シェルを実行する

task :Hello do
 sh "echo 'hello!'"
end

実行するとechoが実行される。

rake Hello
echo 'hello!'
hello!

よって、gcc等を実行すればコンパイルできるようになる。