我尝试创建一个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我遇到了一些问题:
我希望有人有良好的gnu制作经验,可以帮助我解决这些问题。
提前致谢
最好的问候
阿克塞尔