具有任务依赖性的 Rake 规则 [英] Rake rule with task dependency

查看:41
本文介绍了具有任务依赖性的 Rake 规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制定一个依赖于另一项任务的佣金规则.如果我只使用如下所示的任务,它会起作用:

I'm trying to make a rake rule that depends on another task. It works if I only use tasks as shown below:

task :foo do
  @iv = 42
end

task :bar => :foo do
  p @iv
end

Rake::Task[:bar].invoke

结果:

42

我希望能够使用规则,以便我可以使用正则表达式.但我收到一个错误:

I'd like to be able to use rules so I can use regexes. But I'm getting an error:

task :foo do
  @iv = 42
end

rule /bar/ => :foo do
  p @iv
end

Rake::Task["bar"].invoke

结果:

/Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:284:in `block in make_sources': Don't know how to handle rule dependent: :foo (RuntimeError)
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:267:in `map'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:267:in `make_sources'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:245:in `attempt_rule'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:130:in `block in enhance_with_matching_rule'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:128:in `each'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:128:in `enhance_with_matching_rule'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:56:in `[]'
  from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:361:in `[]'
  from baz.rb:63:in `<main>'

如何使用依赖于其他任务的规则?

How do I use a rule that depends on another task?

如下所述,该规则将其依赖项作为字符串:

As mentioned below the rule takes it's dependency as a string:

task :foo do
  @iv = 42
end

rule /bar/ => "foo" do
  p @iv
end

Rake::Task["bar"].invoke
#=> 42

推荐答案

:foo改为"foo"即可解决问题.

似乎task_manager.rb#make_sources 不处理符号.

https://github.com/ruby/rake/blob/master/lib/rake/task_manager.rb#L266,L288

这篇关于具有任务依赖性的 Rake 规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆