2016-12-01 57 views
0

用make我可以這樣做:Rake:自動刪除中間文件? (對make .INTERMEDIATE機制等效?)

%.json : %.jsonnet 
    jsonnet $< -o [email protected] 

JSON_FILES = main.tf.json 

.INTERMEDIATE : $(JSON_FILES) 

plan : $(JSON_FILES) 
    terraform plan 

有了這個地方,如果我跑

make plan 

我的文件main.tf.jsonnet將被編譯爲main.tf.json(一種Terraform程序可以理解的格式),Terraform將運行,並且在完成之後,main.tf.json文件將自動被刪除。

我想知道在Rake中是否有類似的功能?藉此大多是相似的Rakefile:

require 'rake/clean' 

rule '.json' => '.jsonnet' do |t| 
    sh "jsonnet '#{t.source}' -o '#{t.name}'" 
end 

JSON_FILES = Dir["**/*.jsonnet"].map{ |f| f.sub(/jsonnet$/, 'json')} 
CLEAN.include(JSON_FILES) 

desc "See what changes will be made (terraform plan)" 
task plan: JSON_FILES do 
    sh "terraform plan" 
end 

如果我運行rake plan,它將執行幾乎一樣的牌子,卻會留下main.tf.json上的文件系統。我一直在簡單地追加Rake::Task[:clean].execute到所有相關任務的結尾,但這有點冒失。有沒有更好的方法來做到這一點?

回答

0

我想出另一種毛黑客進行排序的做我想做的......

的規則現在看起來是這樣的:

$needs_clean = false 

rule '.json' => '.jsonnet' do |t| 
    $needs_clean = true 
    sh "jsonnet '#{t.source}' -o '#{t.name}'" 
end 

而且Rake文件結束有這樣:

at_exit { Rake::Task[:clean].invoke if $needs_clean } 

我不是這個解決方案的忠實粉絲,但它似乎工作至今...