Rakefile

Rake 的作用类似于C的make。用来定义和执行任务。它没有专门的语法,完全用ruby来写。

Task

一个任务包含:名称(String或Symbol),后面是一个数组(包含一些先决条件,即其他任务名)或一个block。
同一个任务可以定义多次,就好像这个任务是分成几部分定义一样,最终是各部分的合并。

task :name
task name: [:prereq1, :prereq2]
task name: %w[prereq1 prereq2]

task name: [:prereq1, :prereq2] do |t|
  # actions (may reference t)
end

File task

文件任务通过以下文件来创建其他文件,即建立文件的依赖关系。它用 file 方法,而不是 task,任务名称是字符串

# 通过 a.o 和 b.o 创建 prog 文件,创建的方法在 block 里。
file "prog" => ["a.o", "b.o"] do |t|
  sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
end

Directory Tasks

目录任务是文件任务的一种快捷方式

directory "testdata/examples/doc"

# 等同于
file "testdata" do |t| mkdir t.name end
file "testdata/examples" => ["testdata"] do |t| mkdir t.name end
file "testdata/examples/doc" => ["testdata/examples"] do |t| mkdir t.name end

Rules

没有指定任务名称,而是规定任务名称的格式。如下面是形如xx.o的任务。


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

Comments

除了ruby的注释外,可以使用 desc 来描述任务,这样就可以用 rake -T来显示该任务了。

desc "Create a distribution package"
task package: %w[ ... ] do ... end

命名空间

namespace "main" do
  task :build do
    # Build the main program
  end
end

namespace "samples" do
  task :build do
    # Build the sample programs
  end
end

task build: %w[main:build samples:build]

Rakefile 文件可以分成多个文件放在 lib目录里,如rails的 lib/tasks

当你在项目目录里执行 rake 时,首先在当前目录查找 Rakefile 文件,如果没有会向上级目录查找

你可能感兴趣的:(Rakefile)