在scons中使用构建器调用自定义函数

时间:2015-09-14 14:12:08

标签: scons

我有一个自定义函数,我想使用构建器对象

调用它
def generate_action(target, source, env):
    print "TRIDIP:::::::I am in"
    return None

现在我创建了一个构建器

env['BUILDERS']['generateAction'] = Builder(action = generate_action)
action = env.generateAction() 

如您所见,我没有传递任何arugument,我不想传递我的自定义函数generate_action()未被调用的任何参数。我想在没有任何争论的情况下调用该函数。

1 个答案:

答案 0 :(得分:1)

您必须调用Builder,指定您依赖的结果文件作为源。您不能同时保留“target =”“source =”参数,因为SCons必须知道此步骤适合的总构建图中的位置。您的SConscript应该看起来像什么喜欢(未经测试,从头顶开始):

# env = Environment()
env['BUILDERS']['generateAction'] = Builder(action = generate_action)
# creates your other result file
myResult = env.someOtherBuilder('out.foo', 'in.txt')
# calls your generate_action method
action = env.generateAction('dummy.txt', myResult)

注意,这将总是调用“generateAction”构建器,因为永远不会创建“dummy.txt”,因此目标永远不会是最新的。

最后,我的猜测是,这个答案不会真正有用,会让你陷入更多困境。当人们尝试在构建时调用自定义方法时,他们通常以错误的方式使用SCons ......大多数时候因为他们没有正确的心智模型来理解SCons的工作方式。您可能希望阅读UserGuide中的一些基础知识(http://scons.org/doc/production/HTML/scons-user.html),或者在scons-users@scons.org的用户邮件列表中询问您的其他问题(另请参阅http://scons.org/lists.php)。