首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rake不识别具有多个扩展的规则

Rake不识别具有多个扩展的规则
EN

Stack Overflow用户
提问于 2013-04-21 00:43:22
回答 1查看 436关注 0票数 2

我使用Rake从Markdown文件生成PDF。如果Markdown文件是filename.md格式的,我喜欢filename.md.pdf格式而不是filename.pdf格式,这样自动补全的工作方式就是我喜欢的方式,这样就可以清楚地知道PDF文件的来源。

我有这个Rake文件,它工作得很好。

代码语言:javascript
复制
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是这样的:

代码语言:javascript
复制
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中工作得很好:

代码语言:javascript
复制
%.md.pdf : %.md
        pandoc $< -o $@
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-11 00:09:12

最近我自己也遇到了类似的问题,当我试图在规则中指定一个带有多个点的扩展时。我通过使用here.中描述的不同规则语法解决了这个问题

在您的规则中尝试如下所示:

代码语言:javascript
复制
rule( /\.md\.pdf$/ => [
    proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
    sh "pandoc #{t.source} -o #{t.name}"
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16122744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档