【问题标题】:Processing files through multiple steps with Waf使用 Waf 通过多个步骤处理文件
【发布时间】:2015-03-02 15:22:33
【问题描述】:

我正在尝试使用 Waf 创建一个自动化流程,以基于 HTML5 样板的 ANT 构建脚本优化、缩小等网站的源文件。其中一部分包括通过两个实用程序运行 img 目录中的所有 PNG,optipngadvpng

这是我目前在这些任务上的最佳尝试:

def build(ctx):
    ctx(
        rule = '${OPTIPNG} -quiet -o5 -i 1 -out ${TGT} ${SRC}',
        source = 'img1.png',
        target = 'img1-opt.png'
    )

    ctx(
        rule = '${ADVPNG} -z -1 ${SRC}',
        source = SOMETHING,
        target = SOMETHING ELSE
    )

我首先在 img1 上运行 optipng,这是我的第一个问题。我希望输出文件与输入文件具有相同的名称。但是,将target 设置为相同的名称会导致 Waf 检测到死锁。所以,我通过附加后缀继续前进。

advpng 有点奇怪,因为它不会创建新的输出文件:它会修改输入文件。所以,我现在需要一种方法来访问 optipng 的输出,它现在驻留在构建的输出目录中。

完成这项任务的正确方法是什么?

【问题讨论】:

    标签: build waf


    【解决方案1】:

    第一个问题由 waf 书籍section 6.3 部分解决。那是关于复制,所以你必须调整它。第 11 节关于提供任意配置文件的部分内容也有些相关。

    您必须编写一些 Python 来解析构建目录中的目标文件。该脚本有效:

    top = '.'
    out = 'build'
    
    def configure(ctx):
        pass
    
    def build(ctx):
        txt = ctx.srcnode.find_node('text.txt')
    
        ctx(
            rule = 'cp ${SRC} ${TGT}',
            source = txt,
            target = txt.get_bld() # Or: ctx.bldnode.make_node('text.txt')
        )
    
        ctx(
            rule = 'wc ${SRC} > ${TGT}',
            source = 'text.txt', # Or: txt.get_bld(),
            target = 'count.txt'
        )
    

    对于第二步,waf 似乎解析了构建目录中的文字源文件名,但您也可以使用步骤 1 中的 bld 节点显式解析它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2023-03-06
      • 1970-01-01
      • 2011-03-20
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多