Rake

示例

下方是一个简单的用于构建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 "铲起大饼打包"
  endend