Rake

RakeDeveloper(s)| Jim Weirich

|

Stable release|

13.0.6 / July 9, 2021; 3 years ago (2021-07-09)

Written in| Ruby
Operating system| Cross-platform
Type| Software development tools
License| MIT License
Website| ruby.github.io/rake/

Rake is a software task management and a build automation tool created by Jim Weirich, written in Ruby. It allows the user to specify tasks and to describe dependencies as well as to group tasks in a namespace. It is similar to SCons and Make and it's written in the Ruby programming language and Rakefile (equivalent of Makefile in Make). It uses the standard Ruby syntax. Rake uses Ruby's anonymous function blocks to define various tasks, allowing the use of Ruby syntax. It has a library of common tasks: for example, functions to do common file-manipulation tasks and a library to remove compiled files (the "clean" task). Like Make, Rake can also synthesize tasks based on patterns: for example, automatically building a file compilation task based on filename patterns. Rake is now part of the standard library of Ruby from version 1.9 onward.

## Contents

* 1 Example
* 1.1 Rules
* 1.2 Advanced rules
* 2 See also
* 3 External links

## Example

Below is an example of a simple Rake script to build a C Hello World program.

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

### Rules

When a file is named as a prerequisite but it does not have a file task defined for it, Rake will attempt to synthesize a task by looking at a list of rules supplied in the Rakefile. For example, suppose we were trying to invoke task "mycode.o" with no tasks defined for it. If the Rakefile has a rule that looks like this:

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

This rule will synthesize any task that ends in ".o". It has as a prerequisite that a source file with an extension of ".c" must exist. If Rake is able to find a file named "mycode.c", it will automatically create a task that builds "mycode.o" from "mycode.c". If the file "mycode.c" does not exist, Rake will attempt to recursively synthesize a rule for it.

When a task is synthesized from a rule, the source attribute of the task is set to the matching source file. This allows users to write rules with actions that reference the source file.

### Advanced rules

Any regular expression may be used as the rule pattern. Additionally, a proc may be used to calculate the name of the source file. This allows for complex patterns and sources.

The following rule is equivalent to the example above:

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

NOTE: Because of a quirk in Ruby syntax, parentheses are required around a rule when the first argument is a regular expression.

The following rule might be used for Java files:

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

Below is an example of a simple Rake recipe:

namespace :cake do
desc 'make pancakes'
task :pancake => [:flour,:milk,:egg,:baking_powder] do
puts "sizzle"
end
task :butter do
puts "cut 3 tablespoons of butter into tiny squares"
end
task :flour => :butter do
puts "use hands to knead butter squares into 1 1/2 cup flour"
end
task :milk do
puts "add 1 1/4 cup milk"
end
task :egg do
puts "add 1 egg"
end
task :baking_powder do
puts "add 3 1/2 teaspoons baking powder"
end
end

## See also

* Make
* Apache Maven
* Apache Ant

## External links

* Rake documentation

* v
* t
* e

Ruby programming language

Implementations|

| Active|

* Ruby MRI; YARV
* mruby
* JRuby
* Rubinius
* MagLev
* RubyMotion

|

Discontinued|

* MacRuby
* IronRuby
* XRuby
* HotRuby

IDE|

* Komodo
* NetBeans
* RadRails
* RubyMine

Applications|

* Capistrano
* Hackety Hack
* Interactive Ruby Shell
* Pry
* Rake
* Redmine
* RSpec
* RubyGems
* RVM
* Chef
* Puppet
* Vagrant
* Homebrew
* CocoaPods
* fastlane (mobile app build automation tools)

Libraries and frameworks|

* Adhearsion
* Camping
* eRuby (RHTML)
* Merb
* Padrino
* RubyCocoa
* Ruby on Rails
* Shoes
* Sinatra
* QtRuby

Server software|

* mod ruby
* Mongrel
* Phusion Passenger (mod_rails/mod_rack)
* Rack
* WEBrick

People|

* Yukihiro Matsumoto
* David Heinemeier Hansson
* why the lucky stiff

Other|

* Document format
* why's (poignant) Guide to Ruby
* Ruby Central
* RubyKaigi
* RubyForge
* Ruby License

* Category
* Commons

0.00

(0 votes)

|

Retrieved from "https://handwiki.org/wiki/index.php?title=Software:Rake&oldid=3460689"
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template