1

我厌倦了在 make 中查找魔法符号并决定尝试waf

我正在尝试使用 calibre 制作电子书,我想创建一个 wscript,它接收一个文件,运行一个包含该文件的一些参数的程序,并产生一个输出。仅当输入文件比输出文件新时才应构建 Waf。

在make中,我会写一个像这样的makefile:

%.epub: %.recipe
    ebook-convert $ .epub --test -vv --debug-pipeline debug

其中 % 是文件基本名称的魔术符号,$ 是输出文件名 (basename.epub) 的符号。

我可以打电话make soverflow.epub,它会在 soverflow.recipe 上运行 ebook-convert。如果 .recipe 自上次构建以来没有更改,则它不会做任何事情。

我怎样才能在 waf 中做类似的事情?

(为什么是 waf?因为它使用了一种我已经知道的真实语言。如果这在 scons 中真的很容易使用,那也是一个很好的答案。)

4

1 回答 1

3

我想出了如何制作一个基本的 wscript 文件,但我不知道如何构建命令行上指定的目标。


Waf Book 中有一个关于任务生成器的部分。基于名称和扩展名的文件处理部分给出了我改编的 lua 示例:

from waflib import TaskGen
TaskGen.declare_chain(
        rule         = 'ebook-convert ${SRC} .epub --test -vv --debug-pipeline debug', 
        ext_in       = '.recipe', 
        ext_out      = '.epub'
)

top = '.'
out = 'build'

def configure(conf):
        pass

def build(bld):
    bld(source='soverflow.recipe')

它甚至会自动提供删除 epub 的干净步骤。

于 2012-02-25T17:18:23.450 回答