如何在SCons中实际编译之前和之后添加自定义生成报告?

时间:2014-11-12 23:01:26

标签: scons

我正在迁移构建一个相当大的系统以使用SCons。我想添加自定义构建报告功能,该功能将更新网站有关构建状态的信息。它会向服务器发布一条自定义消息,指示作业的开始,并在作业完成后发布类似的消息。但我正在努力找到适合这些电话的地方。

我实现的构建系统应该是通用的,即无论构建操作是什么,它都应该这样做。它可以执行命令或运行自定义函数。

在源代码中,我发现在_ActionAction()的_ _call__方法中添加自定义函数会起作用。但我想在不修改SCons的源代码的情况下这样做。

if execute:
    if chdir:
        os.chdir(chdir)
    try:
        # add custome before execution report function
        stat = self.execute(target, source, env, executor=executor)
        # add custome after execution report function 
        if isinstance(stat, SCons.Errors.BuildError):
            s = exitstatfunc(stat.status)
            if s:
                stat.status = s
            else:
                stat = s
        else:
            stat = exitstatfunc(stat)
    finally:
        if save_cwd:
            os.chdir(save_cwd)

我可以在PRINT_CMD_LINE_FUNC中执行预编译操作报告,但是我没有找到任何类似的编译后操作报告。

AddPreActionAddAfterAction也可以按我的意愿行事,但为了让我为所有动作添加报告功能,我需要知道动作对象是什么,然后再调用add pre - 每个人的行动和后续行动。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我并非100%确定我能得到你想要完成的任务。我假设您要定义一个可以称为" myenv.MyBuilder(...)"的构建器,它应该关闭并且执行主要工作"。但在实际命令行之前和之后,它应该发出日志/信息消息。

在这种情况下,您可以尝试定义" action =" Builder的关键字作为Actions列表,而不是单个Action。列表中的单个项可以是字符串(单个命令行)或函数(callables),也可以是单个Action。 然后,只要目标必须由Builder创建,就会按顺序执行单个操作。