Вам нужен для него правило? Вы можете попытаться создать несколько задач файл для него:
n = 1..6 #Your n-Array
n.each do |i|
targetfile = 'file_c%i.dst' % i #Define the file to be created
desc 'Create %s based n %s' % [ targetfile, 'file_c.src']
file targetfile => 'file_c.src' do |task| #Define task to create targetfile
puts "cmd1 -o #{task.name} -i #{task.source}" #Command to create targetfile
end
end
В моих тестах у меня не было никаких проблем, чтобы объединить его с уже определенным правилом.
Ниже моей полной testcode:
require 'rake'
src_files = Rake::FileList["*.src"]
dst_files = src_files.ext 'dst'
task :default => dst_files
def build_dst(dst, src)
puts "cmd -o #{dst} -i #{src}" #Command to create targetfile
File.open(dst,'w'){|f|} #Dummy to simulate generation
end
rule '.dst' => '.src' do |task|
build_dst task.name, task.source
end
N = 1..6 #array of numbers.
N.each do |i|
targetfile = 'file_c%i.dst' % i #Define the file to be created
desc 'Create %s based n %s' % [ targetfile, 'file_c.src']
file targetfile => 'file_c.src' do |task| #Define task to create targetfile
build_dst task.name, task.source
end
end
#Make dummy-sources.
File.open('file_c.src','w'){|f|}
File.open('x.src','w'){|f|}
Rake.application['x.dst'].invoke
Rake.application['file_c3.dst'].invoke
Вы увидите, команды exectuted, как и ожидалось:
cmd -o x.dst -i x.src
cmd -o file_c3.dst -i file_c.src
одно дополнение - из сферы вашего вопроса: I есть некоторые проблемы, чтобы увидеть реальный случай использования вашего вопроса.
Если команда для генерации file_c<n>.dst
зависит только от того же исходного кода, то сгенерированные файлы dst будут одинаковыми - вы можете просто скопировать результат. Я бы ожидал некоторых других различий в зависимости.
Если file_c<n>.dst
зависит file_c<n>.src
и file_c.src
то вы могли бы использовать что-то вроде:
require 'rake'
rule '.dst' => '.src' do |task|
puts "cmd -o #{task.name} -i #{task.prerequisites}" #Command to create targetfile
File.open(task.name,'w'){} #Dummy to simulate generation
end
#Add additional prerequsites (cold also defined generic)
file 'file_c3.dst' => 'file_c.src'
#Make dummy-sources.
#~ File.open('file_c.src','w'){|f|}
#~ File.open('file_c3.src','w'){|f|}
Rake.application['file_c3.dst'].invoke
добавить дополнительные предпосылки и заменить task.source
на task.prerequisites
.
Обновление: Я узнал, что нет прямой поддержки для написания правила, имеющего несколько целей (ссылка: http://hyperpolyglot.org/build).Но я чувствую, что должен быть способ сделать это ... – Ninad
смотреть эту беседу Джим Вайрих, https://www.youtube.com/watch?v=KaEqZtulOus, это показывает некоторые довольно аккуратные трюки с Rake .. – Doon
@Doon, спасибо. «Рейк власти» !? :) Хорошая презентация Джима, как всегда. И теперь я понимаю разницу между файловой задачей и правилами - и что нужно держать правила очень простыми и скорее использовать задачи файлов для чего-то более сложного, чем разное расширение. – Ninad