Рейк (программное обеспечение)
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Разработчик(и) | Джим Вейрих |
---|---|
Стабильная версия | 13.2.1 [1]
/ 5 апреля 2024 г |
Репозиторий | |
Написано в | Руби |
Операционная система | Кросс-платформенный |
Тип | Инструменты разработки программного обеспечения |
Лицензия | МОЯ лицензия |
Веб-сайт | рубин |
Rake — это средство управления программными задачами и инструмент автоматизации сборки, созданное Джимом Вейрихом . Он позволяет пользователю указывать задачи и описывать зависимости, а также группировать задачи в пространства имен. Он похож на SCons и Make . Rake был написан на Ruby и является частью стандартной библиотеки Ruby, начиная с версии 1.9. [2] [3]
Примеры
[ редактировать ]Задачи, которые необходимо выполнить, необходимо определить в файле конфигурации под названием Rakefile. Rakefile не имеет специального синтаксиса и содержит исполняемый код Ruby. [4]
Задачи
[ редактировать ]Основной единицей в Rake является задача. Задача имеет имя и блок действий, определяющий ее функциональность. Следующий код определяет задачуприветствие, которая выводит текст «Привет, Рейк!» на консоль. [5]
task :greet do
puts "Hello, Rake!"
end
При определении задачи можно по желанию добавить зависимости, то есть одна задача может зависеть от успешного завершения другой задачи. Вызов задачи «начального заполнения» из следующего примера сначала выполнит задачу «миграции», а только затем продолжит выполнение задачи «начального заполнения». [5]
task :seed => :migrate do
# This task will run after the :migrate task
end
Задачи также можно сделать более универсальными, приняв аргументы. Например, задача «generate_report» будет принимать дату в качестве аргумента. Если аргумент не указан, используется текущая дата. [5]
task :generate_report, [:date] do |t, args|
report_date = args[:date] || Date.today
# Generate the report based on the specified date
end
Особым типом задач является файловая задача, которую можно использовать для указания задач создания файлов. Например, в следующей задаче даны два объектных файла, т.е. «ao» и «bo», для создания исполняемой программы. [6]
file "prog" => ["a.o", "b.o"] do |t|
sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
end
Еще одним полезным инструментом является метод удобства каталогов, который можно использовать для создания каталогов по требованию. [7]
directory "testdata/examples/doc"
Правила
[ редактировать ]Если файл указан как предварительное условие, но для него не определена файловая задача, Rake попытается синтезировать задачу, просматривая список правил, предоставленный в Rakefile. Например, предположим, что мы пытаемся вызвать задачу «mycode.o», для которой не определены никакие задачи. Если в Rakefile есть правило, которое выглядит так:
rule '.o' => '.c' do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
Это правило будет синтезировать любую задачу, оканчивающуюся на «.o». Обязательным условием является наличие исходного файла с расширением «.c». Если Rake сможет найти файл с именем «mycode.c», он автоматически создаст задачу, которая собирает «mycode.o» из «mycode.c». Если файл «mycode.c» не существует, Rake попытается рекурсивно синтезировать для него правило.
Когда задача синтезируется из правила, атрибуту источника задачи присваивается соответствующий исходный файл. Это позволяет пользователям писать правила с действиями, которые ссылаются на исходный файл. [8]
Расширенные правила
[ редактировать ]В качестве шаблона правила можно использовать любое регулярное выражение. Кроме того, процедура может использоваться для вычисления имени исходного файла. Это позволяет использовать сложные шаблоны и источники.
Следующее правило эквивалентно приведенному выше примеру:
rule(/\.o$/ =>
->(t_name){ t_name.sub /\.o$/, '.c' }) do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
ПРИМЕЧАНИЕ. Из-за особенностей синтаксиса Ruby правила необходимо заключать в круглые скобки, если первый аргумент является регулярным выражением.
Для файлов Java можно использовать следующее правило: [9]
rule '.class' => ->(t_name){ t_name
.sub(/\.class$/, '.java')
.sub(/^classes\//, 'src/') } do |t|
java_compile(t.source, t.name)
end
Пространства имен
[ редактировать ]Чтобы лучше организовать большие Rake-файлы, задачи можно сгруппировать по пространствам имен. [10] Ниже приведен пример простого рецепта рейка:
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
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Выпуск v13.2.1 · Ruby/rake · GitHub» . Гитхаб . 5 апреля 2024 г. . Проверено 21 июня 2024 г.
- ^ «Грабли — Руби Мейк» . нд . Проверено 28 февраля 2024 г.
- ^ «НОВОСТИ» . nd Архивировано из оригинала 4 марта 2016 года . Проверено 29 февраля 2024 г.
- ^ «Формат рейк-файла» . Гитхаб . Проверено 21 июня 2024 г.
- ^ Jump up to: а б с «Учебное пособие по Ruby on Rails: понимание Rake и автоматизации задач» . 10.06.2019 . Проверено 21 июня 2024 г.
- ^ «Формат Rakefile # Задачи файла» . Гитхаб . Проверено 21 июня 2024 г.
- ^ «Формат Rakefile # Задачи каталога» . Гитхаб . Проверено 21 июня 2024 г.
- ^ «#Правила формата Rakefile» . Гитхаб . Проверено 21 июня 2024 г.
- ^ «Формат Rakefile # Расширенные правила» . Гитхаб . Проверено 21 июня 2024 г.
- ^ «Формат Rakefile # Пространства имен» . Гитхаб . Проверено 21 июня 2024 г.