我正在寻找一种在scons中注册像end-build回调这样的东西的方法.例如,我现在正在做这样的事情:
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)
Run Code Online (Sandbox Code Playgroud)
这仅适用于非交互模式.我希望能够在每次构建结束时弹出类似的内容,特别是在交互式scons会话中运行多个"构建"命令时.
我发现的唯一建议,环顾四周,似乎是使用依赖系统或AddPostAction调用glom.我这样做是不对的,因为它不是真正的依赖(严格来说,它甚至不是构建的一部分) - 它只是一个需要在每个构建的结束.
谢谢!
我不认为使用依赖系统来解决这个问题.这就是我通常这样做的方式:
def finish( target, source, env ):
raise Exception( 'DO IT' )
finish_command = Command( 'finish', [], finish )
Depends( finish_command, DEFAULT_TARGETS )
Default( finish_command )
Run Code Online (Sandbox Code Playgroud)
这会创建一个命令,该命令依赖于它执行的默认目标(所以你知道它总是最后运行 - 请参阅scons手册中的DEFAULT_TARGETS).希望这可以帮助.
我一直在研究这个问题,但没有发现 SCons 提供任何有帮助的东西。这似乎是一个非常有用的功能,也许 SCons 开发人员正在关注这些线程并会采纳建议......
我查看了源代码并弄清楚了如何做到这一点。我将尝试向 scons.org 上的 SCons 开发人员建议这一更改。
如果您有兴趣,文件是engine/SCons/Script/Main.py,函数是_build_targets()。在此函数结束时,您只需添加对用户提供的回调的调用即可。当然,如果您在网络中的多台不同计算机上构建,则此解决方案不会很有用,因为您必须将更改移植到需要的任何地方,但如果您只在一台计算机上构建,那么也许您可以进行更改直到/如果 SCons 官方提供解决方案。
如果您需要帮助实施更改,请告诉我,我会看看我能做些什么。
另一种选择是将调用包装到 SCons,并让包装器脚本执行所需的操作,但这在 SCons 交互模式下没有帮助。
希望这可以帮助,
布雷迪
编辑:
我为此创建了一个功能请求:http://scons.tigris.org/issues/show_bug.cgi ?id=2834
| 归档时间: |
|
| 查看次数: |
2848 次 |
| 最近记录: |