SCons的后备构建器

时间:2012-06-21 07:13:29

标签: python scons

是否可以在SCons中实现类似后备构建方法的内容?

例如,我的SConscript中有以下代码:

if check_something():
    MyBuilder(a, b)
....
if dont_know_how_to_build(a):
    FallBackBuilder(a, c)

我无法预测是否会激活“正常构建方法”。 但是我希望它在没有被激活时和SCons没有激活 知道如何构建a,它使用FallBackBuilder

我当然明白写作是不可能的 类似的东西:

if check_something():
    MyBuilder(a, b)
else:
    FallBackBuilder(a, c)

但我对此解决方案不满意, 因为我的SConscript / SConstruct文件中可以有数千个位置 可以指定a的某些构建器。

我只想指定一些“后备”方法 在和SConscript。

你怎么看?可能吗?或者这是一个错误的方向?

用其他的话来说,如果可能在SConscript的某个地方获得已经有关联构建器的对象列表?

例如:

Builder1(a,b)
Builder2(b,c)
list_of_buildable_objects = get_list_of_buildable_objects()
Builder3(c,d)

我想知道如何获取可构建对象列表,在此示例中必须等于[a, b]或类似的东西。

1 个答案:

答案 0 :(得分:0)

指定它时不太可能。

SConstruct / SConscripts用于告诉SCons要做什么。它不会立即做这些事情。它使用这些信息来构建一个依赖树,由一些源扫描器添加,以构建系统中所有依赖关系的(希望)完整图片。

然后遍历此DAG(有向非循环图)以确定要发出的命令的正确顺序。

图表中的某些对象的构建器直接由SCons分配,而不是通过SConstruct / SConscripts分配。

您是否希望在其他构建器运行并运行失败后运行此回退构建器?或者这仅适用于系统没有其他指定构建器的目标?