嵌套 SCons 生成器 [英] Nested SCons Builder

查看:70
本文介绍了嵌套 SCons 生成器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对 SCons Builder 输出进行一些后期处理:

I would like to do some post-processing of a SCons Builder output:

env = Environment()
bld = Builder(action = 'postproc $SOURCE $TARGET')
env.Append(BUILDERS = {'PostProc': bld})
prog = env.Program('foo.c')
env.PostProc('foo.pp',prog)

这按预期工作.但是,我更喜欢使用单个 Builder 调用,所以我想我可以这样嵌套:

This works as expected. However, I would prefer using a single Builder call, so I thought I could nest it like this:

env = Environment()
bld = Builder(action = 'postproc $SOURCE $TARGET')
env.Append(BUILDERS = {'PostProc': bld})

def build_pp(env, target, source):
    prog = env.Program(source)
    return env.PostProc(target,prog)

bld2 = Builder(action = build_pp)
env.Append(BUILDERS = {'BuildPP': bld2})

env.BuildPP('foo.pp','foo.c')

但可以理解的结果是:

scons: *** [foo.pp] Multiple ways to build the same target were specified for: foo.pp (from ['foo.c'] and from ['foo'])

知道如何实现这一点吗?

Any idea how this could be realized?

推荐答案

将多个构建器包装成一个(可能结合扩展参数解析等)通常使用伪构建器完成.查看 伪构建器:AddMethod 函数""nofollow">用户指南 以及 http://www.scons 上的工具编写指南.org/wiki/ToolsForFools .

Wrapping several Builders into a single one (possibly combined with extended argument parsing and such) is usually done with a pseudo-Builder. Check chapter 20 "Pseudo-Builders: the AddMethod function" of the User Guide and also the Tools writing guide at http://www.scons.org/wiki/ToolsForFools .

这篇关于嵌套 SCons 生成器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆