Build 如何为自定义编译器编写waf文件?

Build 如何为自定义编译器编写waf文件?,build,build-automation,waf,calibre,Build,Build Automation,Waf,Calibre,我厌倦了在make中查找魔法符号,决定尝试一下 我正在尝试使用calibre制作电子书,我想创建一个wscript,它接收一个文件,运行一个包含该文件的参数的程序,并生成一个输出。仅当输入文件比输出文件新时,才应生成Waf 在make中,我会编写如下makefile: %.epub: %.recipe ebook-convert $ .epub --test -vv --debug-pipeline debug 其中%是文件的basename的神奇符号,$是输出文件名(basename

我厌倦了在make中查找魔法符号,决定尝试一下

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

在make中,我会编写如下makefile:

%.epub: %.recipe
    ebook-convert $ .epub --test -vv --debug-pipeline debug
其中%是文件的basename的神奇符号,$是输出文件名(basename.epub)的符号

我可以调用
makesoverflow.epub
,它将在soverflow.recipe上运行电子书转换。如果.recipe自上次构建以来没有更改,它将不会做任何事情

我如何在waf中执行类似操作


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

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


Waf的书中有一节是关于。本节给出了我改编的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的干净步骤。

我放弃了waf,发现在中这样做非常容易。本文档中有一节介绍。看见