将环境变量传递给Scons中的自定义构建器

时间:2012-02-02 02:51:50

标签: scons

我有一个自定义构建器,如下所示

my_builder = Builder(action = ['mytool' + env['TESTFLAG'] + ' $SOURCE -o $TARGET')],
                     suffix = '',
                     src_suffix = '.cpp',
                     single_source = True)
env.Append(BUILDERS = {'TestBuilder': my_builder})

我想在每次调用TESTFLAG时为TestBuilder传递不同的值。每次调用TestBuilder之前设置变量都不起作用。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

使用SCons时的技巧,特别是在添加新功能时,要记住它是声明性的 - 你说你想要发生什么,它将解决执行动作所需的方式(和顺序)实现这一目标。编写构建器时,您将指定在需要运行工具时将执行的操作

问题出现是因为创建构建器时不知道TESTFLAGS的值。实际上,您需要一种在评估变量时延迟的机制。 SCons使用变量替换来实现这一目标。

在下面的TestBuilder中,$TESTFLAG$SOURCE$TARGET将在工具运行时全部替换为值。

my_builder = Builder(action = 'mytool $TESTFLAG $SOURCE -o $TARGET',
                     suffix = '',
                     src_suffix = '.cpp',
                     single_source = True)
env['TESTFLAG'] = 'default-value'
env.Append(BUILDERS = {'TestBuilder': my_builder})
env.TestBuilder( 'foo.cpp' )
env.TestBuilder( 'bar.cpp', TESTFLAG = 'overridden-value' )