Rake无法识别具有多个扩展名的规则

时间:2013-04-20 16:43:22

标签: rake

我使用Rake从Markdown文件生成PDF。如果Markdown文件为filename.md,我认为PDF为filename.md.pdf而不是filename.pdf,因此自动完成功能会按照我喜欢的方式运行,因此很清楚PDF文件的来源是什么

我有这个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 pdfsrake filename.pdf,则会按预期生成PDF,但PDF名称为filename.pdf

但是我想让Rakefile成为这样:

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 pdfsrake filename.md.pdf会返回错误Don't know how to build task 'filename.md.pdf'

如何以我想要的方式生成文件名?

顺便说一句,这种规则适用于Make,即:

%.md.pdf : %.md
        pandoc $< -o $@

1 个答案:

答案 0 :(得分:3)

当我尝试在规则中指定具有多个点的扩展时,我最近遇到了类似的问题。我使用了here.

所述的不同规则语法解决了这个问题

为您的规则尝试类似的内容:

rule( /\.md\.pdf$/ => [
    proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
    sh "pandoc #{t.source} -o #{t.name}"
end