我正在迁移构建一个相当大的系统以使用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中执行预编译操作报告,但是我没有找到任何类似的编译后操作报告。
AddPreAction
和AddAfterAction
也可以按我的意愿行事,但为了让我为所有动作添加报告功能,我需要知道动作对象是什么,然后再调用add pre - 每个人的行动和后续行动。
感谢您的帮助!
答案 0 :(得分:1)
我并非100%确定我能得到你想要完成的任务。我假设您要定义一个可以称为" myenv.MyBuilder(...)"的构建器,它应该关闭并且执行主要工作"。但在实际命令行之前和之后,它应该发出日志/信息消息。
在这种情况下,您可以尝试定义" action =" Builder的关键字作为Actions列表,而不是单个Action。列表中的单个项可以是字符串(单个命令行)或函数(callables),也可以是单个Action。 然后,只要目标必须由Builder创建,就会按顺序执行单个操作。