我使用Rake从Markdown文件生成PDF。如果Markdown文件是filename.md格式的,我喜欢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 pdfs或rake 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 pdfs或rake filename.md.pdf将返回错误Don't know how to build task 'filename.md.pdf'。
怎样才能以我想要的方式生成文件名?
顺便说一句,这种类型的规则在Make中工作得很好:
%.md.pdf : %.md
pandoc $< -o $@发布于 2013-05-11 00:09:12
最近我自己也遇到了类似的问题,当我试图在规则中指定一个带有多个点的扩展时。我通过使用here.中描述的不同规则语法解决了这个问题
在您的规则中尝试如下所示:
rule( /\.md\.pdf$/ => [
proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
sh "pandoc #{t.source} -o #{t.name}"
endhttps://stackoverflow.com/questions/16122744
复制相似问题