我正在尝试使用Waf创建一个自动化流程,以根据HTML5样板文件的ANT构建脚本优化,缩小网站的源文件等。其中一部分包括通过两个实用程序optipng
和advpng
在img目录中运行所有PNG。
这是我目前对这些任务的最佳尝试:
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
的输出,它现在位于构建的输出目录中。
完成此任务的正确方法是什么?
答案 0 :(得分:0)
第一个问题部分由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节点明确解析它。