Rake是一款軟件任務管理及組建自動化工具。用戶可指定任務、描述依賴關係及分組命名空間中的任務。

Rake
開發者Jim Weirich英語Jim Weirich
當前版本12.3.0(2017年11月15日,​7年前​(2017-11-15
原始碼庫 編輯維基數據鏈接
程式語言Ruby
作業系統Cross-platform
類型Software development tools
許可協議MIT License
網站ruby.github.io/rake/

此軟件與SConsMake類似,但有着諸多差異。Rake使用Ruby編寫,使用以Ruby語法編寫的Rakefile(與Make中的Makefile等同)。此軟件由吉姆·韋里奇英語Jim Weirich編寫。

Rake使用Ruby的匿名函數塊來定義多個任務並允許用戶使用Ruby語法。它擁有共同任務庫,例如:控制文件任務的函數及移除已編譯文件(即「clean」任務)的庫。與Make相似的是,Rake同樣可以根據模式來合成任務,例如:根據文件名自動構建文件編譯任務。Rake現已成為Ruby 1.9後標準庫的一部分。

示例

下方是一個簡單的用於構建C語言 「Hellow, world!」程序的Rake腳本。

  file 'hello.o' => 'hello.c' do
    sh 'cc -c -o hello.o hello.c'
  end
  file 'hello' => 'hello.o' do
    sh 'cc -o hello hello.o'
  end

要查看更多示例,請參見Rakefile 文件格式頁面存檔備份,存於互聯網檔案館)文檔。

規則

當文件被列為先決條件但不含有為其定義的文件任務時,Rake將嘗試通過查看Rakefile所支持的規則列表來合成任務。例如,假設我們嘗試調用任務"我的代碼.o"卻不為其定義任務,且Rakefile規則如下所示:

rule '.o' => '.c' do |t|
  sh "cc #{t.source} -c -o #{t.name}"
end

此規則將自動合成任意以「.o」為後綴名的任務。前提條件是必須存在拓展名為「.c」的源文件。若Rake可以找到名為「我的代碼.c」的源文件,其將自動新建任務將「我的代碼.c」構建為「我的代碼.o」。若文件「我的代碼.c」不存在,Rake將嘗試為其遞歸合成規則。

當任務從規則中合成後,任務的原屬性被設置為匹配源文件。這點使得用戶可撰寫含引用源文件操作的規則。

高級規則

任意正則表達式均可作為規則模式。除此之外,進程也可用於計算源文件名稱以允許複雜的模式及源。

下方規則與上方示例等同:

rule(/\.o$/ =>
  ->(t_name){ t_name.sub /\.o$/, '.c' }) do |t|
  sh "cc #{t.source} -c -o #{t.name}"
end

請注意:根據Ruby語法習慣,當首個參數為正則表達式時需要在規則旁插入括號。

下列規則可用於Java文件:

rule '.class' => ->(t_name){ t_name
    .sub(/\.class$/, '.java')
    .sub(/^classes\//, 'src/') } do |t|
  java_compile(t.source, t.name)
end

下方是個簡單的Rake合成配方示例:

namespace :cake do
  desc '做煎饼馃子'
  task :pancake => [:egg,:mianhu,:conghua,:baking_powder] do
     puts "凉油"
  end
  task :mianhu do
    puts "放上凉面糊推成圆饼型"
  end
  task :egg => :mianhu do
    puts "打上1{{frac|1|2}}个鸡蛋"
  end
  task :conghua do
    puts "放上1{{frac|1|4}}勺葱花"
  end
  task :egg do
   puts "打上1个鸡蛋"
  end
  task :qiguo do
   puts "铲起大饼打包"
  end
end

另請參閱

外部連結