Rake

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 06:24, 23 декабря 2017.
Rake
Разработчики: Jim Weirich
Постоянный выпуск: 12.3.0 / 15 November 2017 года; 2 years ago (2017-11-15)
Написана на: Ruby (programming language)
Операционная система: кросс-платформенный
Тип ПО: Инструменты разработки программного обеспечения
Лицензия: MIT Лицензия
Веб-сайт ruby.github.io/rake/

Rake-это инструмент управления задачами программного обеспечения и автоматизации сборки. Он позволяет пользователю задавать задачи и описывать зависимости, а также группировать задачи в пространстве имен.

Он похож на проектов scons и сделать, но он имеет ряд отличий. Инструмент написан на языке программирования Ruby и Rakefiles (эквивалент makefile'ы в) использовать синтаксис Ruby. Он был создан Джимом Вайрихом.

Rake используются анонимные функции Ruby блоки для определения различных задач, что позволяет использовать синтаксис Руби. В нем есть библиотека общих задач: например, функции для выполнения общих задач манипуляции файлами и библиотека для удаления скомпилированных файлов ("чистая" задача). Как и Make, Rake также может синтезировать задачи на основе шаблонов: например, автоматически создавать задачу компиляции файлов на основе шаблонов имен файлов. Rake теперь является частью стандартной библиотеки из Ruby версии 1.9 и далее.[Источник 1].

Описание

Rake-это как программа реализована на Ruby. Задачи и зависимости задаются стандартным синтаксисом Ruby. Rake имеет следующие возможности:

  • Rakefiles (версия повесы из makefile'ы) полностью определены в стандарте синтаксис Ruby. Нет XML-файлов для редактирования. Нет причудливый синтаксис Makefile беспокоиться о (это вкладка или пробел?)
  • Пользователи могут указать задачи с предварительными условиями.
  • Грабли поддерживает шаблоны правило для того чтобы синтезировать неявные задачи.
  • Гибкие списки файлов, которые действуют как массивы, но знают о манипулировании именами файлов и пути.
  • Библиотека предварительно упакованных задач, чтобы сделать здание rakefiles проще. Например, задач для создания архивов и публикации по FTP или SSH сайтах. (Раньше задачи для построения RDoc и драгоценных камней были включены в грабли, но теперь они доступны в RDoc и RubyGems соответственно.)
  • Поддержка параллельного выполнения задач.[Источник 2].


Пример

Ниже приведен пример простого скрипта на Rake, чтобы построить мир программа C.

  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.

Правила

Если файл назван как обязательное условие, но для него не определена файловая задача, рейк попытается синтезировать задачу, просмотрев список правил, представленных в файле Rakefile. Например, предположим, что мы пытались вызвать задачу "mycode.o " без определенных для него задач. Если у Rakefile есть правило, которое выглядит следующим образом:

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

Это правило синтезирует любую задачу, которая заканчивается ".о." Она имеет в качестве предварительного условия исходный файл с расширением ".С" должно существовать. Если Rake может найти файл с именем "mycode.C", это автоматически создаст задачу, которая строит "микод".o" от "mycode в.с." Если файл "mycode.С " не существует, Rake попытаются рекурсивно синтезировать для него правило.

При синтезе задачи из правила исходный атрибут задачи устанавливается в соответствующий исходный файл. Это позволяет пользователям писать правила с действиями, которые ссылаются на исходный файл.

Дополнительные правила

Любое регулярное выражение может использоваться в качестве шаблона правила. Кроме того, proc может использоваться для вычисления имени исходного файла. Это позволяет использовать сложные шаблоны и источники.

Следующее правило эквивалентно приведенному выше примеру:

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 '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{{frac|1|2}} cup flour"
  end
  task :milk do
    puts "add 1{{frac|1|4}} cup milk"
  end
  task :egg do
   puts "add 1 egg"
  end
  task :baking_powder do
   puts "add 3{{frac|1|2}} teaspoons baking powder"
  end
end

Лицензия

Рейк доступен по лицензии в стиле MIT.

Авторское Право Джим Вейрич

Разрешение настоящим предоставляется бесплатно, для любого лица, получившего копию этого программного обеспечения и сопутствующей документации файлы (“программное обеспечение”), дело в программное обеспечение без ограничений, включая, без ограничений, права использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и/или продавать копии программного обеспечения, а также разрешать лицам, которым программное обеспечение меблированные сделать так, при соблюдении следующих условий: Вышеуказанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части программного обеспечения.[Источник 2].

Источники

  1. Rake // Wikipedia. Дата обновления: 02.12.2017. URL: https://en.wikipedia.org/wiki/Rake_(software) (дата обращения: 23.12.2017)
  2. 2,0 2,1 Rake // docs.seattlerb. Дата обновления: 03.12.2017. URL: http://docs.seattlerb.org/rake/ (дата обращения: 23.12.2017)