【问题标题】:How do I write a waf file for a custom compiler?如何为自定义编译器编写 waf 文件?
【发布时间】:2012-03-15 19:03:53
【问题描述】:

我厌倦了在 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 中真的很容易使用,那也是一个很好的答案。)

【问题讨论】:

标签: build build-automation waf calibre


【解决方案1】:

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


Waf Book 有一个关于Task generators 的部分。 Name and extension-based file processing 部分给出了我改编的 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 的干净步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2015-08-17
    • 2017-07-21
    • 2012-01-31
    相关资源
    最近更新 更多