2016-12-25 43 views
0

我試圖制定一個取決於另一個任務的rake規則。它的工作原理如下圖所示,如果我只用任務:具有任務依賴關係的Rake規則

task :foo do 
    @iv = 42 
end 

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

Rake::Task[:bar].invoke 

結果:

42 

我希望能夠使用規則,所以我可以使用正則表達式。但我發現了一個錯誤:

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>' 

如何使用依賴於其他任務的規則?

編輯:

由於此規則下面提到需要它的依賴作爲一個字符串:

task :foo do 
    @iv = 42 
end 

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

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

回答