从Python脚本调用scons
我对scons和Python很陌生。 我想知道是否有方法从python脚本中调用scons。
我的python脚本从用户接受要编译在一起的代码所在的目录列表(除了做一些其他不重要的事情之外)。 它还会生成一个字符串,用作scons创建的可执行文件的名称。
我想将这些信息从我的python脚本传递给scons,然后调用scons。 有没有简单的方法来做到这一点?
我可以想到以下可能性:
subprocess.call("scons"...)
我不确定scons是否接受我需要作为命令行参数传递的所有信息 我已经使用subprocess.call()
python函数完成了这项工作,以封装我正在处理的特定项目所需的一些长而复杂的命令行参数。 有些人认为调用应该更简单,以免需要封装它,但这是一个不同的主题:)
考虑使用命令行参数而不是使用命令行参数的一个选择是使用这里提到的SCONSFLAGS
环境变量。 就个人而言,我不喜欢使用这个选项。
您需要的所有选项都可以作为命令行选项传递。 定制和处理SCons命令行参数的一个好方法是使用SCons AddOption()函数。 此外,您可以使用SCons ARGUMENTS字典获取简单的variable=value
变量。 其他相关的SCons命令行函数是GetOption()和SetOption()。
关于传入可执行文件名称的字符串:SCons可能不会这样。 至少,考虑用一个特定的可执行字符串执行一次脚本,然后第二次执行另一个脚本,然后要清理,如果SCons未使用相同的可执行文件名执行,最终可能会遗留可执行文件。
那么,我想这在理论上是可能的。 scons
可执行文件本身就是一个python脚本,它所做的只是在修改sys.path
变量后执行SCons.Script.main()
。 但是你可能不得不深入挖掘源代码,才能真正理解如何让它做你想做的事情。
更简洁的解决方案是从SConscript文件调用脚本,这可能是预期的用法,应该会更容易。
感谢您的答案。 我结束了使用这种方法:
python脚本将选项列表写入文本文件,将其关闭,然后使用子scons -f MySConscript_file
调用调用scons -f MySConscript_file
。 SConstruct将文本文件中的值读入列表中,并使用它们。