我已经编译在两个方面项目Rake文件,根据全局变量$build_type
,它可以是:debug
或:release
(结果走在不同的目录):
task :build => [:some_other_tasks] do end
我希望创建一个任务,依次编译项目的两个配置,如下所示:
task :build_all do [ :debug, :release ].each do |t| $build_type = t # call task :build with all the tasks it depends on (?) end end
有没有办法将任务称为方法?或者我怎样才能达到类似的效果呢?
task :build => [:some_other_tasks] do build end task :build_all do [:debug, :release].each { |t| build t } end def build(type = :debug) # ... end
rake
的习语,那么根据过去的答案编写你的可能性:
这总是执行任务,但它不执行其依赖项:
Rake::Task["build"].execute
这个执行依赖项,但它只在尚未调用的情况下执行任务:
Rake::Task["build"].invoke
这首先重置任务的already_invoked状态,然后再次执行任务,依赖项和所有:
Rake::Task["build"].reenable Rake::Task["build"].invoke
(请注意,已经调用的依赖项不会被重新执行)
例如:
Rake::Task["db:migrate"].invoke
task :build_all do [ :debug, :release ].each do |t| $build_type = t Rake::Task["build"].reenable Rake::Task["build"].invoke end end
那应该把你排除在外,只需要自己做同样的事情.
task :build_all do [ :debug, :release ].each do |t| $build_type = t Rake::Task["build"].execute end end
task :invoke_another_task do # some code Rake::Task["another:task"].invoke end