覆盖SCons构建器

时间:2015-03-06 22:25:31

标签: scons

我想对所有.o文件(例如ObjectStaticObject构建者生成的文件)进行一些后处理,无论用户使用什么构建器。< / p>

我正试图“覆盖”或“挂钩”基础环境的构建器,但是我无法想出任何有用的东西:

old = env['BUILDERS']['StaticObject']
env['BUILDERS']['StaticObject'] = something_that_calls(old)

是否有规定的方法来挂钩或覆盖StaticObject构建器等内容?

我已经看到了关于Nested SCons Builder的问题,但它没有告诉我如何替换现有的构建器,只是补充其行为。

1 个答案:

答案 0 :(得分:7)

我不知道是否有一种幸运的方式来取代建造者,但我认为你是在正确的轨道上。以下(不可否认的)微不足道的例子对我有用:

def wrap_builder(bld):    
    return Builder(action = [bld.action, 'echo $TARGET'],
                   suffix = bld.suffix,
                   src_suffix = bld.src_suffix)

obj_bld = env['BUILDERS']['Object']
env['BUILDERS']['Object'] = wrap_builder(obj_bld)

env.Program('test', ['test.c'])

带输出:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o test.o -c -std=c99 test.c
echo test.o
test.o
gcc -o test test.o
scons: done building targets.

如您所见,在构建目标文件后执行附加(echo)操作。