Build 如何在每次生成SCON后运行一些代码?
我正在寻找一种方法来注册somthing,就像scons中的最终构建回调。例如,我现在正在做这样的事情:Build 如何在每次生成SCON后运行一些代码?,build,scons,Build,Scons,我正在寻找一种方法来注册somthing,就像scons中的最终构建回调。例如,我现在正在做这样的事情: def print_build_summary(): failures = SCons.Script.GetBuildFailures() notifyExe = 'notify-send ' if len(failures) > 0: notifyExe = notifyExe + ' --urgency=critical Build Fail
def print_build_summary():
failures = SCons.Script.GetBuildFailures()
notifyExe = 'notify-send '
if len(failures) > 0:
notifyExe = notifyExe + ' --urgency=critical Build Failed'
else:
notifyExe = notifyExe + ' --urgency=normal Build Succeed'
os.system(notifyExe)
atexit.register(print_build_summary)
这仅在非交互模式下有效。我希望能够在每次构建结束时弹出类似的内容,特别是在交互式scons会话中运行多个“构建”命令时
环顾四周,我发现的唯一建议似乎是使用依赖系统或AddPostAction
调用来启用glom。这样做对我来说似乎不太合适,因为它不是真正的依赖关系(严格地说,它甚至不是构建的一部分)——它只是需要在每个构建结束时运行的静态代码
谢谢 我一直在研究这个问题,但没有发现烤饼能提供任何帮助。这似乎是一个非常有用的功能,也许SCons开发人员正在关注这些线程,并将采纳建议 我看了一下源代码,并想出了如何做到这一点。我将尝试向SCons.org上的SCons开发人员推荐这一更改 如果您感兴趣,文件是
engine/SCons/Script/Main.py
,函数是\u build\u targets()
。在这个函数的末尾,您只需要向用户提供的回调添加一个调用。当然,如果您在网络中的多台不同机器上构建,此解决方案将不会非常有用,因为您必须将更改移植到所需的任何位置,但是如果您仅在一台机器上构建,那么您可以进行更改,直到/如果SCons正式提供解决方案
如果您需要帮助实施更改,请告诉我,我会看看我能做些什么
另一个选项是包装对SCON的调用,并让包装器脚本执行所需的操作,但这在SCON交互模式下没有帮助
希望这有帮助
布雷迪
编辑:
我为此创建了一个功能请求:我认为使用依赖系统来解决这个问题没有任何问题。我通常是这样做的:
def finish( target, source, env ):
raise Exception( 'DO IT' )
finish_command = Command( 'finish', [], finish )
Depends( finish_command, DEFAULT_TARGETS )
Default( finish_command )
这将创建一个命令,该命令的执行取决于默认目标(因此您知道它总是最后运行-请参阅scons手册中的默认目标)。希望这能有所帮助。这是一个不错的解决方案,但它只在您构建默认目标时起作用。我把最后两行代码换成了:
Depends(finish\u命令,BUILD\u目标);如果“完成”不在生成目标中:生成目标。追加(“完成”)