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

发布于 2025-01-08 18:56:39 字数 603 浏览 0 评论 0原文

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

I got sick of looking up the magic symbols in make and decided to try waf.

I'm trying to use calibre to make ebooks and I'd like to create a wscript that takes in a file, runs a program with some arguments that include that file, and produces an output. Waf should only build if the input file is newer than the output.

In make, I'd write a makefile like this:

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

Where % is a magic symbol for the basename of the file and $ a symbol for the output filename (basename.epub).

I could call make soverflow.epub and it would run ebook-convert on soverflow.recipe. If the .recipe hadn't changed since the last build, it wouldn't do anything.

How can I do something similar in waf?

(Why waf? Because it uses a real language that I already know. If this is really easy to use in scons, that's a good answer too.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你是年少的欢喜 2025-01-15 18:56:39

我弄清楚了如何制作基本的 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 的干净步骤。

I figured out how to make a basic wscript file, but I don't know how to build targets specified on the command-line.


The Waf Book has a section on Task generators. The Name and extension-based file processing section gives an example for lua that I adapted:

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')

It even automatically provides a clean step that removes the epub.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文