Nested SCons Builder

瘦欲@ 提交于 2019-12-11 07:18:48

问题


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)

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

But the comprehensible result is:

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?


回答1:


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 .



来源:https://stackoverflow.com/questions/25941641/nested-scons-builder

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!