使用gnu make& amp;转换电子书格式与口径生成文件

时间:2015-04-03 21:33:22

标签: makefile converter gnu-make calibre

我尝试创建一个makefile,借助caliber-convert(电子书转换)转换电子书格式。我喜欢的格式顺序是epub> mobi> PDF格式。 makefile应该在具有不同格式(epub,mobi,pdf)的电子书的文件夹中执行。一本电子书可以以多种格式存在。 Make应该转换所有现有电子书的所有现有格式(例如电子书的格式为epub和pdf - make应该创建缺少的mobi变体)。用于会话的源格式由首选格式顺序设置。我设法创建一个makefile,它可以转换所有丢失的格式。见下文。

SOURCES:=$(shell find . -type f -iname "*.epub" -or -iname "*.mobi" -or -iname "*.pdf" 2>/dev/null | sed 's/ /\*/g')

TARGETS_EPUB:=$(SOURCES:%.mobi=%.epub) $(SOURCES:%.pdf=%.epub)
TARGETS_MOBI:=$(SOURCES:%.epub=%.mobi) $(SOURCES:%.pdf=%.mobi)
TARGETS_PDF:=$(SOURCES:%.epub=%.pdf) $(SOURCES:%.mobi=%.pdf)

%.epub: %.mobi
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

%.epub: %.pdf
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

%.mobi: %.epub
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

%.mobi: %.pdf
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

%.pdf: %.epub
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

%.pdf: %.mobi
        ebook-convert '$(subst *, ,$^)' '$(subst *, ,$@)'

all: epub mobi pdf

epub: ${TARGETS_EPUB}
mobi: ${TARGETS_MOBI}
pdf: ${TARGETS_PDF}

此makefile读取当前目录的所有epub,mobi和pdf文件。然后用*占位符替换文件名中的空格(因为make数组是空格分隔的)。目标设定了make应该如何转换格式以及以何种顺序转换。

如何在另一种格式中转换一种格式的命令设置在目标变量下面。 ebook-convert通过解析文件扩展名来检测源格式和目标格式。因此,每个格式会话的命令行都是相同的。

使用这个makefile我遇到了一些问题:

  1. 例如将丢失的epub转换出mobi,然后使用生成的epub生成丢失的pdf。但我只想转换现有格式的文件而不是新生成的文件。也许有可能建议make只使用现有文件作为源?
  2. 我想在当前目录的子文件夹中转换电子书。但是如果这些文件夹的名称中有空格,我会遇到问题。我通过递归搜索来查找find命令。用占位符替换空格在文件夹名称中不起作用。
  3. 我希望有人有良好的gnu制作经验,可以帮助我解决这些问题。

    提前致谢

    最好的问候

    阿克塞尔

0 个答案:

没有答案