Rake无法识别具有多个扩展名的规则
问题描述:
我使用Rake从Markdown文件生成PDF。如果Markdown文件是filename.md
,我喜欢PDF为filename.md.pdf
而不是filename.pdf
,以便自动完成按我喜欢的方式工作,以便清楚PDF文件的来源是什么。Rake无法识别具有多个扩展名的规则
我有这个Rake文件,它工作正常。
MDFILES = FileList["*.md"]
PDFS = MDFILES.ext("pdf")
desc "Build PDFs of all chapters"
task :pdfs => PDFS
# Build PDFs from Markdown source
rule ".pdf" => ".md" do |t|
sh "pandoC#{t.source} -o #{t.name}"
end
如果我运行rake pdfs
或rake filename.pdf
的PDF文件生成如预期,但PDF文件被命名为filename.pdf
。
但我想的Rake文件是这个:
MDFILES = FileList["*.md"]
PDFS = MDFILES.ext("md.pdf")
desc "Build PDFs of all chapters"
task :pdfs => PDFS
# Build PDFs from Markdown source
rule "md.pdf" => ".md" do |t|
sh "pandoC#{t.source} -o #{t.name}"
end
运行rake pdfs
或rake filename.md.pdf
返回错误Don't know how to build task 'filename.md.pdf'
。
如何以我想要的方式生成文件名?
顺便说一句,这种类型的规则的正常工作与制作,即:
%.md.pdf : %.md
pandoc $< -o [email protected]
答
我也曾有过类似的问题,我最近当我试图指定与规则中的多个点的延伸。
rule(/\.md\.pdf$/ => [
proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
sh "pandoC#{t.source} -o #{t.name}"
end
这真是棒极了:我通过使用不同的规则语法描述here.
尝试这样的事情为您的规则解决它。感谢您指出可选的规则语法。它当然更强大,但比Make更丑陋。 – 2013-05-11 17:05:31